|
Authored by: indyandy on Saturday, May 19 2012 @ 08:45 PM EDT |
[Ed: As Andy Rubin refused to acknowledge an email due to inconsistent indents I
have tried to reproduce the indents exactly] "
From:
Tim Lindholm
To: Andy Rubin
Sent: 8/5/2005 12:49
PM
Cc:
Bcc:
Subject: Re: Fwd: Java VM for
Android
This is indeed entertaining, and I'm sure lots of offers
to "help"
will pop up as the Android Project becomes better known
here.
FWIW I largely agree with Brian, and think that the guy pointing
to
the various open source efforts out there is largely clueless.
OK,
maybe there might be a few odds and ends that would be worth
picking
up, where we have no value to add and the license isn't onerous.
But
most of that stuff is complete crap. The first 30% of a Java
runtime
is not nearly as valuable or costly as the last 30%, or 5%, of
a
commercial-quality one.
I do want to second Robert G's assessment: he,
Urs and Srdjan were
three of what is surely one of the best small JVM
implementation
teams that has existed (there were five implementors total in
the
original team). They shared an aesthetic for clean design and
coding
that you probably won't see outside of academics. They had
some flaws, but
not many. One is that they are stubborn Northern
Europeans, who will not
necessarily appreciate some other way of
doing things. But I don't think
they want to be JVM engineers any
more, and this separation makes for less
reason for concern. Frank
Yellin doesn't have the elegance of the HotSpot
guys, but is
extremely bright and very experienced with Sun's CLDC
implementations.
The other Sun guys he mentions were each very good in their
ways, but
not in ways that directly relate to what you need -- they were
Big
Java guys, e.g. worrying about scalability and management.
On this
same line, yesterday (or the day before??) I had lunch with
the guy at Sun
who is the brain behind Sun's little-JVM-on-Linux
effort, on the efficient
use of multiple processes on Linux. He
wants to get out of Sun and is
extremely interested in Google,
even while not knowing anything about
Android. (That email to
Vineet might be able to change this?). Unfortunately
he has
immigration things require him to be out of the US Sept-Oct,
and
then career things that might make him want to stay at Sun
until
January. Knowledge of Android might overcome the latter, but if
we
tried for him in the shorter term we'd need to accommodate the
away
time. If we can't get him before the away time then he very
likely
will stay until January. This guy could be a key hire. The
only
possible downfall is that there had historically been bad
blood
between the team he worked in and the HotSpot guys, but since
then
he has proven his value.
--Tim
Andy Rubin wrote:
>
Thought you'd get a kick out of this thread ...
>
>Begin forwarded
message:
>
>>*From: *Robert Griesemer <gri@google.com
<mailto:gri@google.com>>
>>*Date: *August 5, 2005 11 :35:38
AM PDT *To: *Brian Swetland
>> <Swetland@google.com
<mailto:swetland@google.com>> *Cc: *Sascha
>> Brawer
<Sascha@google.com <mailto:sascha@google.com>>,
>>
arubin@google.com <mailto:arubin@google.com>,
nicksears@google.com
>> <mailto:nicksears@google.com>,
miner@google.com
>> <mailto:miner@google.com>,
cwhite@google.com
>> <mailto:cwhite@google.com>,
fadden@google.com
>> <mailto:fadden@google.com>,
tcole@google.com
>> <mailto:tcole@google.com>,
ficus@google.com
>> <mailto:ficus@google.com>, Patrik Reali
<patrik@google.com
>> <mailto:patrik@google.com>>, Urs
Hoelzle <urs@google.com
>> <mailto:urs@google.com>>
*Subject: **Re: Java VM for
Android*
>>
>>
>>Brian;
>>
>>
I can't really comment on your project but I'd like to give you
>>some
more background info in case you are interested: There are
>>several
people here at Google that have intimate VM knowledge: Urs
>>
H"i(, V2lzle, Srdjan Mitrovic, and I all worked on Sun's HotSpot JVM;
we
>> are in fact part of the original designers of the VM. Srdjan and
I
>> later wrote the "client" compiler for the VM (this is
the default
>>compiler shipped with Sun's VM, for ia32 and SPARC); and
we also
>> wrote the compiler for one version of Sun's CLDC VM for
embedded
>>devices (also referred to as the "Monty" VM,
running on StrongARM).
>>Todd Turnidge, David Stoutamire, and Ben
Gomes joined the HotSpot
>> VM effort a bit later but also have done
significant work in that
>>space. Srdjan, Todd, and I later also
worked on a successor of the
>>HotSpot VM (for MIPS) at a startup. And
last but not least we now
>>also have Tim Lindholm and Frank Yellin,
the original Java VM guys
>> here at Google. But you probably don't
want that many cooks ...
>>
>>Anyway, you may want to
consider chatting with some of these
>> people, there is a
considerable amount of knowledge that can be
>>tapped. -
gri
>>
>> PS: I am not cc: these extra people to reduce the
amount of spam
>>you're getting ...
:-)
>>
>>
>>
>>On 8/5/05, *Brian
Swetland* <Swetland@google.com
>>
<mailto:swetland@google.com>> wrote:
>>
>> I am a
somewhat familiar with the grungy work involved in embedded
>> JVM
building -- I wrote the VM that the Danger Hiptop
platform
>>uses.
>>
>>There are some useful
reasons (in my mind) for going through the
>> effort of building our
own embedded VM rather than just going with
>>off the shelf
solutions:
>>
>> - We'd like things to be really
well-integrated with the
>> environment, small, fast, and fast to
launch. Both the "run the vm
>> in a little box just for
midlets" model (used by most handsets
>> today) and "run the
entire world inside one vm" model (used by
>>danger) have
downsides. I'd like to take advantage of running Linux
>>on CPUs with
a MMU (arm9 and better) and having multiple instances
>>of the VM run
in their own process space. Being able to have hard
>> limits imposed
by the kernel on memory use, etc, and tear down a
>> whole VM if an
app misbehaves is something we wished for often at
>> Danger. To do
this, we need to make sure we can start up things
>>quickly when apps
launch -- if java is core to the system and not a
>> little novelty
like in current handsets, users are not going to
>>want to wait 10-15
seconds for apps to launch.
>>
>> - License choice is
important. One of the goals of this project is
>>to provide an open
source system that's appealing to handset OEMs.
>>The Linux kernel is
GPL'd, but all the pieces above the kernel
>>that we're using or
building so far are under much friendlier
>> licenses (BSD or MIT
style typically). Bringing in third party
>>commercial solutions is
tricky for this reason too, unless we plan
>> on buying them outright
or otherwise convincing them to release
>>their software under an open
source license.
>>
>> - After some amazingly negative
experiences at Be, dealing with
>> Cygnus C++ compiler support, I
would have a lot of concerns about
>> throwing money (away) at Redhat
or Cygnus or the like for language
>>or compiler support. Of course
there's also the concern of
>>shopping core parts of the system out to
possibly disinterested
>>third parties.
>>
>>-The
JVM is going to be a central piece of the system we're
>> building,
not some little add-on on the side -- so we can provide
>> some really
good java application development and user experiences.
>> I'd like to
take recycle bits where possible to support javascript
>>and other
language bindings, which will require doing things a
>> little
differently than an off the shelf JVM.
>>
>> - Classpath is
interesting for their "build it all in java"
>> approach,
but from a performance perspective (which matters a lot
>>on small
devices), pushing chunks of the core library to native
>>code is a
huge win. Also, it is GPL with some special riders
>>(which I thought
the GPL disallowed ... ).
>>
>>Anyway, those are just some
points off the top of my
head,
>>
>>Brian
>>
>>On 8/5/05, Sascha
Brawer <Sascha@google.com
>> <mailto:sascha@google.com>>
wrote:
>>> Hi androids,
>>>
>>>I happened
to stumble upon your wiki page [1]. Are you really
>>sure
you
>>>want to write your own JVM, as [2] seems to indicate?
You
>>> certainly have your reasons, but it sounds like repeating
lots of
>>> grungy work.
>>>
>>> So, if
you don't mind, let me emit some random personal notes
>>> about
the free Java scene.
>>>
>>> Everyone and their dog
(not really, but way too many people)
has
>>been
>>>writing a JVM around GNU Classpath [3].
Most of them don't target
>>>embedded systems, many are crap, much
has gone to oblivion, but
>>>there's also some stuff that might
possibly be useful to
you
>>>guys.
>>>
>>> I'd really recommend
having a look at JamVM [4]: it's fast for
a
>>pure
>>>interpreter, with a decent and small
codebase. JamVM is what most
>>> Classpath hackers use nowadays for
development. The author seems
>>>a nice guy, he was working on
optimizing Sun's and IBM's JVMs,
>>> and is now an independent
contractor.
>>>
>>> I know of two companies using
Classpath for JVMs that target
>>embedded
systems:
>>>
>>> /k! [5] is a cover-up for one guy
having his fun. My personal
>>> impression from the Classpath
meetings is that the author is
>>>really into free software; I'm
pretty sure he would be keen on a
>> contract for
>>> an
open-source embedded JVM. In the meetings list, he seemed to
>>>
know what he's talking about, but I haven't chatted that
much
>>>with him.
>>>
>>> Aicas [6] is a
real company whose embedded JVM is based on
>>
Classpath.
>>> Since they haven't given anything back to the
project, I'd be
>>> surprised if they would be interested in a
contract for an
>> open-source
>>>embedded
JVM.
>>>
>>> There's also a Bytecode-to-C compiler
[7], but I've no idea
>>>whether it's any good. I don't think it
gets much used. But it
>>> might be interesting in case you want to
use an ahead-of-time
>>> compiler for selected hot spots, and use a
pure interpreter like
>>> JamVM for the
rest.
>>>
>>> Kaffe [8] has been used for embedded
systems, but the licensing
>>is in
>>> a limbo (GPL,
copyright held by a dead company).
>>>
>>> You could
pay Redhat for tweaking gcj/gcc, but their focus
>>really
is
>>>on desktop systems. But since you mention C++ linkage on
your
>>> wiki: gee uses the same vtables for Java and C++, they
call this
>>>"Cygnus Native Interface (CNI)". There has
been lots of talk
>>>about
>>giving gee
>>>
a better jitter for dynamically loaded bytecode; they currently
>>have
a
>>>very inefficient interpreter as part of the Java
runtime
>> library. But
>>> last I've heard, Redhat's
plan now is to use the gee backend as
>>a JIT
>>> --
hairy stuff, and certainly totally unusable for an embedded
>>
sytem.
>>>
>>> If you need more info around the free
Java projects, or if want
>>> to establish a contact, please feel
to talk to either me or
>>>
Patrik
>>Reali.
>>> We've both been somewhat active in
this scene before joining
>>> Google, so we know most people from
meetings.
>>>
>>> Oh, you surely know that quite a few
people at Google have a JVM
>>> background? For instance Robert
Griesemer or Urs Hoelzle. I
hope
>>>
>>you
>>>don't mind that I'm taking
the liberty to cc them on this post,
>>> in case they want to
comment/shoot me down.
>>>
>>> Best wishes, and have
fun with Android,
>>>
>>> --
Sascha
>>>
>>> [1]
http://wiki.corp.google.com/twiki/bin/view/Main/Android [2]
>>
http://wiki.corp.google.com/twiki/bin/view/Main/AndroidJavaVM
>>
<http://wiki
.corp.google.com/twiki!bin/view/Main/AndroidJavaVM>
>>>[3]
http://www.gnu.org/software/classpath/
[4]
>>>http://jamvm.sourceforge.net/
[5]
>>>http://www.kiffer.be/k/profile.html [6]
http://www.aicas.com/ [7]
>>>http://jcvm.sourceforge.net/ [8]
http://www.kaffe.org
>>>
>>
>>
>
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Saturday, May 19 2012 @ 08:51 PM EDT |
From: horowitz
To: Leslie
Hawthorn
Cc:
Bcc:
Sent: 3/23/2006 6:49
PM
Subject: Nedim
Nedim Fresko is a candidate for the
"Distinguished Engineer" title at
Sun who comes highly recommended
by a former co-worker, Tim Lindholm.
Nedim brings deep expertise in the area
of Java virtual machines and
the Java eco-system for embedded devices. This
knowledge and
experience is critical to the Android project as the JVM is
core to
our platform architecture and strategy. In addition, as we
engage
further with Sun as a partner for our platform, Nedim's knowledge
of
the code, architecture, MIDP environment, JSRs, etc. will
be
invaluable in helping us navigate the world of Sun mobile
technology.
Nedim will play a crucial role as a liaison between Google and
Sun in
our developing partnership.
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Sunday, May 20 2012 @ 07:00 AM EDT |
[Ed:
1. pdftotext and copy/paste from Evince both introduce many typos
(sometimes 'd' becomes 'c', 'J' becomes ']', some words disappear altogether...
I have tried to correct all these but if anything looks wrong the error is
probably mine.
2. The reason for entering this into evidence is probably
this line:
- Removed various incarnations of the "J word"
from the SDK.
]
Atom
Badge
photo
All weekly snippets from Andy McFadden
(fadden)
PDB page - WWW page - MOMA -
OKRs - Google Resume - Email - This page with
tabs
Wed, Jan 2,
2008
[delete]
 
; Last week:
- (Holiday vacation)
This
week:
- Work on mterp.
Thu, Dec 27,
2007
[delete]
Last week:
- Worked on Dalvlk
VM:
- Worked on "mterp".
- Corrected
reflection access check on protected fields.
- Did some more
directory renaming.
- One interview candidate lunch.
This
week:
- (Christmas holiday + two vacation days)
Mon, Dec 17,
2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Split DEX file access code out into a static library.
Shifted
lots of code around.
- Added ability to run
"dexdump" on a Jar/apk/zip with "classes.dex"
inside.
- Added "dexlist" utility to list methods
found in a DEX archive.
- Added API for Dalvik-level instruction
counting.
- Changed internal exception throws to use
"descriptor" form of class name.
- Added additional
access check on protected field access through reflection.
- Stripped out
some more simulator cruft.
- Started learning Python.
This
week:
- Work on asm verslon of interpreter.
Mon, Dec 10,
2007
[delete]
Last week:
- Finished up filename remapping
in simulator.
- Added "fake" device entry for /sys/android_power
entries.
- Removed last bit of sim-specific stuff in libhardware.
-
Added touch-screen support to simulator.
- Added system property to enable
Java language assertions ln Dalvik.
Added support for class/package name
matching in -ea/-da.
- Fixed a bug in Dalvik that could try to execute code
in an
uninitialized class when throwing an exception from JNI.
- Started
on Dalvik instruction count reporting.
This week:
- Finish up
instruction count mechanism.
- Start on asm interpreter for
Dalvik?
Mon, Dec 3, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Fixed a bug with
multiple re-initializations of a class that fails to load.
-
Fixed a bug with null references in reflection code.
- Corrected
float-to-int conversions.
- Investigated "can't create 764
threads" issue.
- Created an alternative implementation of system
properties for simulator.
- Worked on transparent filename remapping in
simulator.
- Renamed a couple of major directories in the source tree.
-
(one interview)
This week:
- Finish sim filename
remapping.
- Work on Dalvik stuff.
Mon, Nov 26,
2007
[delete]
Last week:
- Got basic set of fake drivers
(display, input, logging) working with
simulator. Also implemented
"vibrating notification mechanism".
- Removed a bunch of
sim-specific code.
- Fixed a bug in JNI local references
- Chased down
an incorrect exception thrown from native code when
''inflate'' sees bad
data.
- (Out Thursday/Friday for Thanksgiving)
This
week:
- Continue work on sim, notably system properties and filename
remapping.
Mon, Nov 19, 2007
[delete]
Last
week:
- Celebrated the public launch of the Android SDK.
- Read an
unhealthy number of blogs, news articles, and press releases.
- Worked on
simulator evolution:
- Moved simulator communication channel out
of runtime and into preload lib.
- Got ''fake device''
infrastructure working.
- Got most of /dev/graphics/fbO,
/dev/ttyO, and /dev/input/eventsO working.
- Chased after the "Binder
thread explosion" bug.
This week:
- Finish up
/dev/input/eventsO.
- Write /dev/log/*.
- Start on filename
substitution.
Mon, Nov 12, 2007
[delete]
Last
week:
- Reviewed patent application.
- Removed various incarnations
of the "J word" from the SDK.
- Began simulator overhaul: launch
runtime in separate xterm, with
LD_PRELOAD wrapper. Removed
"ui-hardware" classes and interfaces.
- Fixed ''ls -R''
behavior.
- Fixed bug in dmtrace (nee jtrace) profiling.
- Various minor
changes to prep for SDK launch.
This week:
- Continue
simulator work.
Mon, Nov 5, 2007
[delete]
Last
week:
- Spent some time configuring a MacPro as a Linux build
machine.
- Worked with jparks and mathias to get the Linux simulator working
agaln.
- Stripped out some simulator cruft.
- Started fiddling around
with planned simulator updates.
- Last-minute stuff for M3.
This
week:
- Continue work on simulator evolution.
- Read lots of news
articles.
Mon, Oct 29, 2007
[delete]
Last
week:
- Added binary event log output to "logcat". Fixed
the binary logging
implementation. Added a log tag map.
- Worked on
Dalvik VM:
- Reduced overhead when calling into the
interpreter.
- Rearranged EXPORT_PC handling so we do less
work.
- Made the main VM thread more generic, so that it's
possible for
other threads to join() on the main thread.
-
Fixed bytecode verification when finding the best superclass of
two array
classes.
- Show more detail when a finalizer throws an uncaught
exception.
- Ensure existing processes blow up if you replace
one of the core
Java classes.
- Added bytecode disassembly to
"dexdump" tool.
This week:
- Continue with Dalvik
stuff.
- Look into making the simulator build more
device-like.
Mon, Oct 22, 2007
[delete]
Last
week:
- Resurrected stand-alone benchmark test app.
- Worked on
Dalvik VM:
- Improved verification of invoke-super. Removes
need for a runtime test.
- Changed verification to switch off of
a propery, rather than an #ifdef.
- Reduced thread-local storage
lookups by passing a pointer around
in performance-critical areas. Sped up
JNI and synchronized blocks.
- Pushed for (and got) a decision on how we're
fixing our IPC mechanism.
- Participated in a promotion & slotting
committee (29 candidates).
This week:
- Continue Dalvik
performance & correctness changes.
Mon, Oct 15,
2007
[delete]
Last week:
- Wrote up proposal for Binder
driver replacement. Discussed with a few people.
- Helped track down some
JNI global reference leaks.
- Pursued the "slow classloader"
problem (identified, partially
addressed with a ZipEntry change, redirected
to core Java lib) .
- Purused the "uncaught exceptions don't work"
problem (identified,
redirected to framework) .
- Worked on Dalvik
VM:
- Refactored the ''instanceof'' cache into a more general
mechanism.
- Used the cache to speed up interface
calls.
- Correctly handle virtual calls to abstract methods
(for
out-of-sync Jar files).
- Updated some developer
docs.
This week:
- Promotion/slotting committee.
-
Continue with Dalvik stuff.
- Get IPC replacement figured out.
Mon,
Oct 8, 2007
[delete]
Last week:
- Added feature in VM
that copies stdout/stderr to log file.
- Made a couple minor changes to help
others debug problems.
- Switched to IPC rewrite full
time.
- Wrote some code for the previous design (not checked in)
.
- Became concerned about scheduling and started thinking
about
alternate plans.
This week:
- Finalize what we're
doing with IPC.
Mon, Oct 1, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Added some static tests
to Java verifier. Rearranged failure
logging to reduce output
size.
- Enabled the Java bytecode verifier.
-
Generalized the reference table mechanism. Use the
"expandable"
mode for JNI global refs and some GC heap
stuff.
- On thread detach, release all monitors entered via the
JNI
MonitorEnter function.
- For JNI compliance, fail if
somebody tries to detach a thread with
Java frames on the
stack.
- Added JNI GetObJectRefType method. We should be JNI
1.6 compliant now.
- Followed up on digit's TCP_NODELAY discovery by runnlng
some
experiments and then disabling Nagle in DDMS and VM JDWP.
- Spent
some time with crazybob talking about the IPC implementation.
- Helped some
people figure out issues uncovered with -Xcheck:Jni.
- Followed up on a
couple of pioneer issues ("bad" APK hosing boot
process,
ServerSocket not closing properly).
- Finished peer revlews.
This
week:
- Investigate interface call speedup.
- Clean up some stuff
in the VM.
- Help out with memory leak issues.
Mon, Sep 24,
2007
[delete
Last week:
- Worked on Dalvik
VM:
- Implemented some slower but EABI-correct
register-access
primitives in interpreter.
- Implemented a
"fast path" in the ARM native JNI call bridge to
make things
faster under EABI.
- Fixed initialization of
Java.lang.Class.
- Tweaked thread dumps to help with system
debugging.
- Fixed some minor stuff in Java libs.
- Forced "check
JNI" to be enabled. Dealt with the ensuing hilarity.
- Chased after a
couple of memory leaks.
- Read through some "new IPC" stuff from
crazybob.
- Worked on performance peer reviews (six).
- Mentor for Andy
Stadler.
- (Got caught up after vacation)
This week:
-
Finish peer reviews.
- Work with crazybob on "new IPC".
- Deal
with whatever comes up.
Mon, Sep 17, 2007
[delete]
Last
week:
- (out on vacation)
This week:
- Get caught
up on current events.
- Enable verification.
- Write static verification
tests.
- Work on perf review stuff.
Tue, Sep 4,
2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Made "-Xverify:{none,remote,all}" do what they
should. Got
verification working end-to-end.
- Rearranged
optimization to respect "-Xdexopt: {all,verified}".
- Added some
code to force optimization+verification of class files
when the system first
boots. This reduces the delay seen on first app
launch.
- Worked on
performance revlew.
- (Out Friday)
This week:
- Monday was
holiday, in Tuesday, away Wednesday-Friday. Mostly
trying not to break
things.
- Out all next week too.
Mon, Aug 27,
2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Rearranged class loading to perform verification
on
non-pre-verified classes.
- Enabled "lite"
verification; code flow analysis still too slow.
- Corrected
handling of package-scope access checks during opt/verify.
-
Added page access guards on LinearAlloc regions to help track down
an EABI
memory corruption bug
-Expanded set of JNI calls you're allowed
to make with an exception
pending (1.6 spec)
-Updated jni.h
to remove some fancy new warn1ngs.
- Added flags to disable
signal catching.
- Partially restored the stand-alone performance
tests.
- Took some measurements with and without mkf's SSA
optimizations.
- Spent some time examining the performance of JDWP to the
device and emulator.
- Attended the Android coming-out tech
talk.
This week:
- Work on performance review.
- Improve
performance of verified code flow analysis.
- Add some static verification
tests.
Mon, Aug 20, 2007
[delete]
Last week:
-
Worked on Dalvik VM:
- Finished development on bytecode
structural verifier. Added more
detailed checks on short integers.
Corrected common superclass
determination. Reduced memory usage and
improved speed.
- Blocked optimization and pre-verification of
classes defined in
multiple DEX files.
- Eliminated
VMThrowable class, folding it into Throwable.
- Added logging of
exceptions thrown from finalizers.
- Added printLoadedClasses to
help with Zygote performance examination.
- Fixed a bug that
would cause Eclipse to break on caught exceptions
that straddled a native
call.
This week:
- Continue static verification work. Enable
(warn-only mode) in live system.
Mon, Aug 13,
2007
[delete]
Last week:
- (away on
vacation)
This week:
- Get caught up.
- Finish bytecode
verification.
- Address some memory profiling analysis needs.
Mon,
Aug 6, 2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Continued work on verifier. Code-flow analysis is
complete, but
we've decided to extend it slightly beyond what the spec
requires.
- Fiddled with exception logging to help track down
excessive
exception activity.
-Aligned array obJects for
EABI.
This week:
- Out on vacation all week.
Mon, Jul
30, 2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Made good progress on bytecode verifier.
-
Moved uncaught exception handling cor the main thread into the
thread-detach
code.
- Fixed Class.newinstance to do access checks properly
(Noser).
- Fixed some reflection exception handling problems
exposed by jython.
- One phone screen.
This week:
-
Continuing on with the verifier.
Mon, Jul 23,
2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Worked on bytecode verifier.
- Changed the
way internal exceptions are initialized to match
expectec
behavior.
-Added JNI vfprintf() and abort()
hooks.
- Fixed up some stuff from the Noser
integration.
-Filed several bugs on improper use of JNI NewGlobalRef ln our
sources.
- One interview.
This week:
- Continue work on
verifier.
Mon, Jul 16, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Continued work on Java
bytecode verifier
- Found last week's heisenbug (gcc-4.2.0
bug)
- Worked with others to chase misc bugs (cheese-scrolling
throw-fest,
spinning Spinner, Bitmap heap trasher, sluggish Mac sim,
nuance
DetachCurrentThread)
- (away on vacation Friday)
This
week:
- Continue Java bytecode verifier
Mon, Jul 9,
2007
[delete]
Last week:
- Worked on Dalvlk
VM:
- Worked on some classfile verification
stuff.
- Added -Xverify option.
- Changed thread
startup from spin-wait to condition wait. Took
some thread startup
timings.
- Enabled _memcmp16() and fixed some bugs in
String.compareTo()
- Removed JamVM from the build.
- Spent a bunch of
time chasing a Heisenbug (771329).
- (Wednesday was a holiday)
This
week:
- Continue chasing the Heisenbug.
- Work on Java Class
verification.
Mon, Jul 2, 2007
[delete]
Last
week:
- Dalvik VM:
- Various improvements to JDWP debug
support (simplified startup, "server=n")
- Fixed a bug
in stack overflow exception handling.
- Changed frame depth
calculation to improve single-step
execution
performance.
-Added some additional tests to
-Xcheck:Jni.
- Fixed a stall in DDM initialization.
- Fiddled with
LD_ASSUME KERNEL for our goobuntu systems.
- Worked on my
OKRs.
This week:
- Start work on Java classfile
verifier.
Mon, Jun 25, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Finished EABI-compliant
JNI call bridge (in ARM assembly).
- Aligned long/double fields
on 64-bit boundaries by reshuffling field order.
- Wrote
replacement 64-bit arg decoder for internal natives.
- Fixed a
rare bug that hit when a debugger attached at the wrong
moment.
- Fixed a bug that could lock up a VM if DDMS was left
connected for too long.
- Reduced class lookup-by-name calls by
caching a reference to [Foo in Foo.
-Experimented with a JDWP
speed improvement (which didn't work).
- Fixed an fd leak in DDMS.
- One
interview.
This week:
- Work on Dalvik.
- Figure out some
OKRs.
Mon, Jun 18, 2007
[delete]
Last week:
-
Worked on Dalvik VM:
- Reduce native heap usage in Zip archive
support.
- Fixed some VM startup ordering issues that were
blocking Noser.
- Wrote a simple linear allocator to hold bits
and pieces of class files.
- Made the VM-internal hash table
load factor adjustable, and
tweaked it for better
performance.
- Allocate Java thread stacks with mmap() instead
of malloc() .
- Started work on ARM EABI support.
- Chased
down some JNI problems for Nuance that turned out to be a bug
in our dynamic
linker.
- One interview.
This week:
- Finish ARM EABI
support in Dalvik.
Mon, Jun 11, 2007
[delete]
Last
week:
- Added ZipFileRO, an extremely memory-conscious Zip archive
access class.
- Replaced all device-side usage of ZipFile/ZipEntry classes
with ZipFileRO.
- Evaluated correctness & performance of mathias'
__memcpy16.
- Remove system class loader from app loader call
sequence.
- Worked on Dalvik VM:
- Implemented
Java.lang.reflect.Method.getExceptionTypes(), now that
we have exception
lists in DEX.
- One phone screen.
- (Out Thursday/Friday on
vacation)
This week:
- Continue with some Dalvik memory
footprint reduction and performance stuff.
Mon, Jun 4,
2007
[delete]
Last week:
-Moved to a new office.
-
Worked on Dalvik VM:
- Improved spin-on-suspend
handling.
- Added support for Java thread priorities. Added
missing pieces of
Thread/ThreadGroup.
- Added
AccessController and ProtectionDomain features, notably
the
getStackDomains() method, for Noser security work.
-
Explored alternative stack allocation methods.
- Fixed a JDWP
bug.
- Two interviews (one cancelled shortly before it started)
-
(Monday was holiday)
This week:
- Work on reduced-heap Zip
support.
- (On vacation Thursday/Friday)
Tue, May 29,
2007
[delete]
Last week:
- Worked on
DalvikVM:
- Sped up native calls.
-
Wrote inline versions of String.equals() and String.compareTo()
(6-40x
faster than Java).
- Changed DEX file section alignment to
64-bit for pending EABI changes.
- Added "-Xss"
flag, use it to set default stack sizes.
- Rearranged the
wait-for-suspend code.
- Added TRACE_ALLOC_COUNTS flag to jtrace. If set,
the allocation
counters are written into the key file.
- Added some misc
fields (total calls, syscall benchmark) to jtrace key header.
- Met with
patent lawyers.
- One interview.
This week:
- Dalvik VM
performance & correctness.
Mon, May 21,
2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Experimented with fixed register assignments in
interpreter core.
- Tracked down and fixed a bug in debugger
method invocation.
- Added Java.lang.Thread constructor that
takes a stack size.
Corrected size bounds in VM.
- In DEX
optimizer, replace calls to ObJect.<init> with instructions
that are
treated as no-ops in standard interpreter.
- Added an
"inline implementation" instruction. Wrote inline
versions of
String.length() and String.charAt().
- Substantially rewrote "efficient
Java" document. Reformatted entire
document, edited existing
sections, added new material.
This week:
- Continue
performance work.
Mon, May 14, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Enabled instruction
rewriting in the DEX optimizer. Improves the
speed of virtual method calls
and accesses to instance fields.
- Wrote a cache for the results
of ''instanceof'' and ''checkcast''
operations. Iterated until
useful.
- Moved DEX class name lookup from a heap-allocated hash
table to
shared-memory storage.
- Changed a large number of
functions from "JValue blah ( ... ) to
"void blah ( ... , JValue*
pResult). This works out better on ARM, and
improves the performance of
native methods returning void (of which we
have many)
.
-Added some JNI performance and correctness
tests.
- Replaced the JNI native call bridge with a hand-coded
ARM assembly version.
- Continued the quest for Java readability.
- One
phone screen.
This week:
- Jury cuty. Assuming I'm not
called up:
- Continue Dalvik performance work.
-
Add some instrumentation features requested by
jparks/veenstra/etc.
Mon, May 7, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
-Completed work on
optimization of virtual fields and instance methods.
- Reworked
optimization mechanism to use fork+exec instead of just fork.
-
Added exception-wrapping to Java.lang.reflect.Method.invoke
implementation.
- Added an instruction counter to get a sense
for which instructions
are popular and which are going
unused.
- Made some minor performance tweaks.
This
week:
- Continue Dalvik performance work.
- Finish Java readability
review work.
Mon, Apr 30, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Reorganized DEX file
loading so that generation and caching of the
byte-swapped version happens
generally (i.e. not merely as a
side-effect of Jar extraction)
.
- Compute and store inter-DEX dependency information.
Re-optimize
files when a dependency changes.
-Examined VM
loaded-classes hash table performance.
- Fixed a problem with
debugger-initiated method invocations that
throw exceptions.
- Worked on
DDMS:
- Warp client selection when a VM is waiting for a
debugger.
This week:
- Finish up Dalvik field/method access
optimizations.
Mon, Apr 23, 2007
[delete]
- Worked on
Dalvik VM:
- Removed most of the overhead associated with
debugger support from
the interpreter core, resulting in a ~30%
speedup.
- Made miscellaneous minor speedups (strict-aliasing,
interpreter
size reduction) .
- Tried some performance
enhancements that didn't work.
- Made some improvements to the
performance tests.
Mon, Apr 16, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Spent a bunch of time
fiddling with the performance tests to try
to get a consistent set of
meaningful numbers.
- Improved performance by inlining part of
class/field/method/string
resolution.
-Moved some low-use
values out of the Method struct. Reduced heap
usage by 12 bytes per
method.
- Reduced the situations in which we initialize a class
to those
specified in the VM spec.
- Reshuffled VM source
tree, moving headers next to sources.
- Show debug info
breakdown in "dexdump -S".
- Fixed a bug that
prevented strings in Object arrays from
displaying nicely in the
debugger.
- Worked on DDMS:
- Changed "Halt"
button to call Runtime.halt() instead of
Runtime.exit(). Bypasses some of
the exit processing.
- Cleaned up some code for a readability review.
-
Wrote up OKRs.
This week:
- Continue Dalvik VM performance
work.
Mon, Apr 9, 2007
[delete]
Last week:
-
Worked on Dalvik VM:
- Rewrote DEX file loading to maximize use
of shared memory,
reducing native heap requirements.
- Fix a
spin-on-suspend when a GC happens while a profiled thread is
waiting to
exit.
Worked on DDMS:
- Cosmetic touch-ups on
heap stats.
- Added a "cause GC"
button.
- Added space for native heap
info.
Provided a work-around for slow log window performance
under Mac OS.
- Wrote a command-line Java performance measurement
tool.
- Attended daily "aardvark" release meetings.
This
week;
- Continue performance improvements, focusing on DEX file
optimization work.
Mon, Apr 2, 2007
[delete]
Last
week:
- Worked on Dalvik VM:
- Added
"inflate" support to classes.dex loading.
-
Investigated debugger performance issues.
- Corrected VM
internal hash table implementation.
- Quick-reject debugger
connection attempts when one is already connected.
When
waiting for a debugger, return after it has connected and
been idle for a
set period (to allow it a chance to set breakpoints).
-Worked on
DDMS:
- Show tid, status, utime, and stime in the
"threads" panel. Update
periodically.
-Chased
after some adb-related problems.
- Reviewed and updated
developer documentation.
- Participated in "aardvark" status
meetings.
- One phone screen.
This week:
- Work on Dalvik
VM
Mon, Mar 26, 2007
[delete]
Last week:
-
Worked on "ddms"
- Finished hooking up
"preferences" items.
- Added a color key to the heap
map.
- Don't try to scan the device if it's in the boot
loader.
- Started work on retrieving per-thread CPU usage
stats.
- Worked on Dalvik VM
- Prefer new
pthread_cond_timedwait_monotonic() for ObJect.wait()
- Allow
global references table to expand.
- Implemented JNI direct byte
buffer calls.
- Reduced the VM's debug-level log
output.
- Implemented Java.lang.reflect.Field get/set
calls.
- Fiddled with some VM options after the first ever
Dalvik
performance review. Toned down paranoia on ''release'' builds
to
improve device performance.
Dalvik is now the default on
devices.
This week:
- Finish per-thread CPU stats in
ddms.
- Dalvik VM performance work.
Mon, Mar 19,
2007
[delete]
Last week:
- Work on DDMS
-
Added preferences screens with JFace. Implemented most of
them.
- Improved the network I/0.
- Refactored
client list. Added "waiting for debugger" icon.
-
Send the app name up when it changes.
- Fixed some ordering
issues when running Dalvik on the device.
- Spent a day hunting down edge
cases exposed by attaching "Jdb" and
letting the system
run.
This week:
- Finish wiring up the DDMS preferences.
-
Work on Dalvik VM (monotonic clock waits, global ref table) .
Mon, Mar
12, 2007
[delete]
Last week:
- Worked on
DDMS:
- Added it to the build. Got it working on
Macs.
- Added "debug selected VM"
feature.
- Added skeletal heap panel UI for
dbort.
- Changed reply routing to allow for generic
"fail" packet.
- Added device screen shot
feature.
- Added device command output capture; used with
"dumpstate",
"dumpsys", and
"logcat".
- Fixed lots of little things in the
UI.
- Added Java "assert" statement support to both VMs.
- In
Dalvik VM: ignore breakpoints and other events while executing
code on
behalf of the debugger.
- In Dalvik VM: treat JNI warnings as fatal errors
(with a to-be-added
command-line option to mellow them out) Made
"Check JNI" the
simulater default.
- Spent some time at the
"Android boot camp" dry run.
- One interview.
This
week:
- Continue work on DDMS.
Mon, Mar 5,
2007
[delete]
Last week:
- Added thread creation/death
notifications to DDM.
- Started work on DDM server user interface. Spent
most of the week on this.
- Added an "is debugger connected?"
feature and a "change JDWP listen
port" feature to both VMs.
-
Participated in ''client team sourcing event''.
- One
interview.
This week:
- Contine work on DDM.
Mon, Feb
26, 2007
[delete]
Last week:
- Worked on
DDM:
- Got enough working to register Java "hello"
message handlers on
both sides and exchange data.
- Updated
debugger pass-through to recycle client connection when
debugger
drops.
- Added DDMS support to JDWP code.
-
Added a couple of calls to our NIO implementation.
- Helped reed/abliss
chase after some resource leaks that presented as
global reference table
overflows.
- One phone screen
- (Monday was holiday)
This
week:
- Continue with DDM server and client.
Tue, Feb 20,
2007
[delete]
Last week:
- Fixed a number of bugs in
Dalvik and JamVM.
- Added file info to "jtrace" output.
-
Worked on DDMS. Currently shuffling packets around with NIO.
- One phone
screen.
This week:
- Continue work on DDMS.
Mon, Feb
12, 2007
[delete]
Last week:
- Implemented per-thread and
default uncaught exception handlers (in
both JamVM and Dalvik VM) .
-
Worked on Dalvik VM:
- Added support for
-Xrunjdwp/-agentlib:jdwp= options.
- Rearranged JDWP startup to
allow "suspend=y".
- Worked on Dalvik Debug Monitor design
doc.
- Started on Dalvik Debug Monitor server (ddms). Added SWT to main
build.
This week:
- Continue work on ddms.
Mon, Feb
5, 2007
[delete]
Last week:
- Worked on Dalvik
VM:
- Fixed bug in libffi that only manifested on Linux/x86
with
optimizations enabled.
- Implemented parts of
ClassLoader.getResource().
- Added DEX-in-Jar support to
user-defined class loaders.
- Corrected JNI AttachCurrentThread
behavior.
- Corrected JNI FindClass behavior to use system class
loader rather
than bootstrap. This allows CLASSPATH to be used for the
initial
class.
- Check method return types in
-Xcheck:Jni.
- Chased after misc bugs people found now that
Dalvik is more widely used.
- Added a few things that the
"mauve" test suite wanted.
This week:
- Implement
"-Xrunjdwp" args.
- Get ClassLoader.getResource() working.
-
Continue to address Dalvik issues as they arise.
Mon, Jan 29,
2007
[delete]
Last week:
- Work on Dalvik
VM:
- Added support for loading DEX files from Zip archives to
bootstrap
class loader.
- Added local-reference abuse
checking to -Xcheck:jni. Fixed a
couple of problems it found, reported
others.
- Added libffi, so we can use PowerPC macs.
-
Announced general availability of Dalvik at group meeting.
- (Out sick most
of Friday)
This week:
- Work on Dalvik VM.
- Work on
resource loading.
Mon, Jan 22, 2007
[delete]
Last
week:
- Dalvik VM:
- Finished work on initating class
loaders in Dalvik.
- Replaced the hold-all "u8" type
with a union throughout the code.
- Corrected some bugs in the JDWP
implementation in both VMs. Added
some missing features that IntelliJ
required.
- Spent most of Tuesday with visitors from Korea.
- (Monday
was holiday)
This week:
- Roll Dalvik VM out to the soon-to-be
adoring masses.
Tue, Jan 16, 2007
[delete]
Last
week:
- Wrote a JNI calling convention converter. Ran it against
our
sources, which used C-style JNI calls in C++ code.
- Dalvik
VM:
- Reworked some VM class loader innards.
-
Did most of the work required to support initating class loaders.
- Perf:
write peer revlews.
- One interview.
This week:
- Finish
initiating class loaders.
- Meet with some Java people.
- Work on
Dalvik.
Mon, Jan 8, 2007
[delete]
Last week:
-
More jni.h tweaks, mostly to make JNIHelp.h work with either C or C++.
-
Changed JamVM's RegisterNatives method to link methods immediately,
rather
than on first use.
- Override the class loader in JNI FindClass while
handling JNI OnLoad.
- Fixed a couple of bugs in the JDWP support.
-
Work on Dalvik VM:
- Added basic class loader support to VM.
Added DEX file loading to
Java ClassLoader.
- Added
"lazy" JNI native method binding by signature.
-
Hooked up local variable table support for the debugger.
-
Improved debugger object registry (fewer registrations, more
appropriate
data structure)
- One interview.
- (four day week)
This
week:
- Performance reviews.
- Work on Dalvik VM.
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Sunday, May 20 2012 @ 07:17 AM EDT |
From: Andy McFadden
To: Jason Parks;
android-dalvik@google.com
Cc:
Bcc:
Sent:
5/2/2007 6:16 PM
Subject: [dalvik] Optimized
stuff
I have some early results on the field/method optimization
stuff. I
added it to the "results3" tab of the writely
"Android Java VM
Performance" doc. (The URL in my browser is 120
characters long, and
I'm not sure that'll work for anyone
else.)
The optimizations convert constant pool indices in instance
field
get/put and virtual method calls to byte offsets and vtable
indices,
respectively. They allow us to skip a couple of
lookups.
Short version: the stuff that you'd expect to get faster got
faster,
by about 20%. Most tests remained the same, which wasn't the case
on
all runs (e.g. AddTest was hanging around 2000 rather than 1887
in
some earlier trials).
The Ackermann and FibonacciSiow tests got
13% and 7% slower. These
use private methods and so use "direct"
rather than virtual calls, so
no improvement was expected. The other empty
non-virtual method tests
also got slower, but the implementations of those
didn't change, so
this is probably due to cache unhappiness. (I made one
tweak that I
need to go back and stare at ARM code for.)
Some of
the recent work on the Java libs showed up in the tests. The
comparisons to
Dalvik @19447 are meaningless on a few tests,
e.g.
HashMapContainsKey.
-Andy
Android-Dalvik mailing
list
Android-Dalvik@google.com
https://mailman.corp.google.com/mailman/l
istinfo/android-dalvik
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Sunday, May 20 2012 @ 07:45 AM EDT |
For the eight-month period from 1-Jan-2007 to 31-Aug-2007 ...
I spent
most of my time working on the Dalvik VM (the Java-ish virtual machine used on
the Android platform).
The VM was first made generally available within
Android in January, replaced our previous VM (JamVM) as the default in March,
and was sufficiently fast and trouble-free that we dropped support for JamVM in
July.
Highlights:
- Reworked various pieces to maximize
data-sharing between processes. For example, the Dalvik classfiles are now
uncompressed to cache files after being byte-swapped and aligned, allowing
direct access from C to shared read-only memory-mapped pages. The VM' s
"write once" data, such as method names and signatures, are stored in
a separate allocation area to minimize the ''write'' in ''copy-on-write'' after
a fork().
- Improved VM performance significantly. I developed a
"DEX optimizer" that rewrites bytecodes as the classfiles are
uncompressed, and created a low-overhead "inline" native call
mechanism. I removed debugger overhead from the interpreter while retaining
support for the debugger. I learned ARM assembly and rewrote the JNI call
bridge in it. I wrote several Java performance tests to exercise the VM, and
ran them frequently to measure results.
- Implemented bytecode
verification. This involves verifying that classes are constructed properly,
and "executing" every bit of code in every class to ensure that
"bad stuff" can't happen, e.g. passing an integer when an obJect
reference is expected.
- Continued development of core features. Most
of the major items were in place, but we still needed a lot of little things
(uncaught exception handling, Java language asserts, etc.) that are expected in
a commercial VM.
- Improved support for Java debuggers. IntelliJ is
now fully supported, and all common JDWP command-line options are
handled.
For the first half of the year we supported both Dalvik VM
and JamVM simultaneously (switchable at runtime).
I maintained JamVM until
we dropped it.
Another major item was the development of the
Dalvik Debug Monitor system. Debugging a Java app on the device required a
complicated series of steps. The Dalvik Debug Monitor Server (DDMS) monitors
all Java processes running on a device, allows you to examine thread and heap
information, and provides pass-through ports for easy debugger connections. I
borrowed a book on the SWT toolkit to write the GUI interface, and piggybacked
the DDM messages on top of JDWP (the Java Debug Wire Protocol) . (The
stand-alone DDMS app has since been transformed by xav into a much nifter
Eclipse plug-in.)
I used what I learned while working on the Dalvik VM
to significantly rewrite and expand our "Efficient Java" document,
which describes best practices for Java development on small embedded
systems.
I frequently worked with others to measure and resolve
performance problems, providing analysis or adding instrumentation to the
VM.
- I write good code. It does what it's supposed to, and
is well commented. (The Dalvik VM sources have extensive descriptions of
''why'' as well as ''what''.) I fix bugs as they come up, even if they're not
related to the feature I'm currently working on.
- I find and fill
needs before their absence becomes critical. Debugging Java apps on the device
was difficult, so I made it easy with DDMS. The tools were developed and stable
before the team shifted from the simulator to the device as the primary
development platform.
- I pick up new technologies quickly. I learned
how to write GUI apps with the SWT toolkit so I could develop DDMS, and I
learned how to program in ARM assembly language to make a piece of the VM run
correctly (and quickly!).
Last review, horowitz
wrote:
"I would like to see Andy reach out more and offer his
advice and guidance on system level architecture, even in areas he is not
responsible for.''
I've stayed pretty focused on the VM.
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Sunday, May 20 2012 @ 03:16 PM EDT |
[Ed
1 This appears to be weekly activity reports from Andy McFadden from the
day he joined Google until May 5 2008.
2. pdftotext and copy/paste from
Evince both introduce many typos (sometimes 'd' becomes 'c', 'J' becomes ']',
some words disappear altogether...
I have tried to correct all these but
if anything looks wrong the error is probably mine.
3. The reason for
entering this into evidence is probably this line:
- Removed various
incarnations of the "J word" from the
SDK.
]
May 5, 2008
Last
week:
- Worked on Dalvik VM:
- Changed a bunch of
labels in mterp so gdb can unravel the stack
when an instruction
breaks.
- Fixed throw of incorrect exception when trying to use
a class that
failed to initialize. Spent some time chasing after the
class
(PhoneUtils).
- Added an alternative form of
assert() that is visible on the device.
- Added a DDM message
that keeps the DDMS thread list in sync when
thread names
change.
- Added additional JNI checks, for static vs. virtual
calling.
- Cleaned up dexlist output.
- Chased
down a bug in JDWP exposed by IntelliJ 7.
- Wrote up some notes about the
Dalvik bytecode verifier.
- Three interviews (two phone screens, one
on-site).
This week:
- Continuing with the misc
fixes.
Apr 28, 2008
Last week:
- Worked on Dalvik
VM:
- Finished up the "circular buffer with last N
allocations" feature.
Over to xav for UI work.
- Fixed
some issues found by security team.
- Moved VM's Zip implementation
into libdex to remove dependencies
on C++ and libutils.
- Various
minor fixes.
-Tracked down a problem with stat() in wrapsim that, for some
reason,
only surfaced now.
- Spent a day as the chairperson of a
slotting/promotion committee.
This week:
-Mise
features/bugs.
- Interviews.
Apr 21, 2008
Last
week:
- Worked on Dalvik VM:
- Got part of the "circular
buffer with last N allocations" feature working.
- Changed the
"backward branch" test a few times to deal with
trivial infinite
loops. (The trick was to get correct behavior
without reducing
performance.)
- Spent a bunch of time figuring out how to get gdb
backtraces to
work correctly with the asm interpreter. Largely
succeeded.
- Tried to do something clever with DEX-truncation bus
errors;
failed due to limitations in debuggerd.
- Fixed a race condition
in the simulator's system property handling.
- Prepped for
promotion/slotting committee.
This week:
- Promotion/slotting
committee (chairperson)
- Finish up "last N allocations"
feature.
Apr 14, 2008
Last week:
- Worked on Dalvik
VM:
- Fixed some JNI issues (tighten arg checking in CheckJNI,
ensure
class init for alloc calls) .
- Corrected mterp
{float,double}-to-int behavior for inf/-inf/NaN.
- Fixed some bugs in
"mterp" that danfuzz found when he split
HelloWorld into
regression tests.
- Added "-Xdexopt:none" mode.
-
Added threadCpuTimeNanos for Noser performance evaluations.
- Varicus
minor fixes (simplify "interrupt should throw", ignore
HeapWorker
watchdog when debugger attached, follow execution-mode
property in TouchDex,
etc) .
- Helped various people track down various bugs.
This
week:
-Work on "recent allocation display"
feature.
Apr 7, 2008
Last week:
- Worked on Dalvik
VM:
- Finished up deadlock predictor. Announced
availability.
- Added validation of UTF-8 strings to
CheckJNI.
- Worked on an array annotation bug.
- Investigated app
native heap usage (for jparks).
- Worked on performance
reviews.
This week:
- Fix bugs.
- Cause
trouble.
Mar 31, 2008
Last week:
- Worked on Dalvik
VM:
- More code reviews and performance checking for DEX format
changes.
- Spent a bunch of time helping others track down bugs.
Filed a few.
- Worked on deadlock prediction.
- Fixed a
long-standing bug in JNI field access.
- Corrected bytecode verifier's
register merge code.
- One interview.
This week:
- Finish
up bytecode verifier.
Mar 24, 2008
Last week:
-
Worked on Dalvik VM:
- Spent a couple of days keeping pace with
danfuzz' changes to the
VM. Wrote additional performance and correctness
tests.
- Enabled allocation limit feature. Added a global allocation
limit
feature for regression tests.
- Made a little progress on
the deadlock prediction feature.
- Explored the relationship between memory
access patterns and
benchmark inconsistency.
- (Away on vacation
Friday)
This week:
- Continue with deadlock
prediction.
Mar 17, 2008
Last week:
- Worked on
Dalvik VM:
- Added a DDM message that retrieves the stack trace of an
arbitrary thread.
- Hunted down an issue involving relative paths in
the bootstrap class path.
- Fixed thread safety issues in
Java.lang.Thread
- Tracked down and fixed a bunch of minor bugs
(annotation lookups
on generated classes, improper throw of
InterruptedException,
HeapWorker thread release, non-EABI long handling,
verification of
null array references, ... ).
- Worked with
danfuzz on DEX format changes.
- Helped track down a library loading
issue.
This week:
- (End cf M6, start of SC1.)
- Work on
deadlock detector.
Mar 10, 2008
Last week:
- Worked
on Dalvik VM:
- Added range checks to DEX code to help prevent
malicious crashes.
- Worked with danfuzz on method prototype
representation changes.
- Rewrote JNI call bridge to work with
danfuzz's "proto" changes.
- Updated a few forms of
"invoke" to perform a null reference check.
- Corrected
Thread.sleep() behavior for multi-year durations.
- Worked around a
TouchDex issue.
- (Out Friday)
This week:
- Wrap up
M6.
Mar 3, 2008
Last week:
- Worked on Dalvik
VM:
- Implemented various fundamental reflection calls using
"system" annotations.
- Examined finalizer
activity.
- Fixed a couple of surprisingly long-lived debugger
issues.
- Made JNI global reference limit concigurable.
-
Added per-thread allocation count limits for regression testing.
-
Added a JNI stack check.
- Cleaned up android.os.SystemProperties.
-
Added offset and size range checks to Zip archive code.
- One phone
screen.
This week:
-Continue with M6 bugs and feature
requests.
Feb 25, 2008
Last week:
- Worked on Dalvik
VM:
- Enabled "mterp" as the default
interpreter.
- Finished implementing
annotations.
- Started working on class attribute reflection,
e.g. method exception lists.
- Updated specs and source comments
to reflect change to 5-arg invoke.
- Tracked down a bug that
would cause a VM crash if you tried to
allocate huge arrays with specific
size values.
- Wrote more tests for annotations and class
attributes.
- (Monday was holiday)
This week:
- Finish
class attribute reflection.
- Continue Dalvik feature creep.
Feb
19, 2008
Last week:
- Worked on Dalvik VM:
- Got a
chunk of annotations working.
- Changed Android runtime to get bootclasspath
from env, removlng a
bad hack in the process.
- Chased after some system
bugs, notably the "ascii crash" failure and
the "gdb frame
base" issue.
- One interview and one phone screen.
This
week:
-Finish annotations.
Feb 11, 2008
Last
week:
- Worked on Dalvik VM:
- Integrated Dalvik
instruction changes from the vacationing danfuzz
into the main
branch.
-Updated "mterp" to handle new/removed
instructions. Spent some
time making the entry/exit code
faster.
- Finished the last bit of C->asm conversions for
mterp. Announced
mterp to the group, encouraging everyone to try
it.
- Fixed an interface class merge bug in the verifier.
-
Created some Java annotation test classes.
- Spent a few hours chasing the
"ascii crash" bug.
This week:
- Implement
annotations.
Feb 4, 2008
Last week:
- Worked on
Dalvik VM:
- Checked in mterp and the Dalvik "exerciser".
Ran performance comparisons.
- Altered Thread.interrupt() handling to
avoid inappropriate exceptions.
- Added feature allowing test code to
enumerate classes in a DEX file.
- Added workaround for Eclipse
debugger flaw.
This week:
- Update mterp to track recent
changes in DEX.
- Start on annotations.
Jan 28, 2008
Last
week:
- Worked on Dalvik VM:
- Fixed a race condition between
System and ClassLoader.
- Worked on mterp.
- Select JDWP transport
based on build configuration.
- Two interviews.
- (Monday was
holiday)
This week:
- Wrap up mterp.
Jan 22,
2008
Last week:
- Worked on Dalvik VM:
- Implemented
VM portion of Java.lang.reflect.Proxy.
- Implemented Harmony-style
VMStack.getClasses() and Class .getStackClasses().
- Fiddled with asm
interp.
- Two interviews.
This week:
- Fix up stuff for
M5.
Jan 14, 2008
Last week:
- Worked on Dalvik
VM:
- Rearranged the way profiling is handled. Made
instruction
counting always available.
- Worked with veenstra to
get Java methods listed ln emulator traces.
- Checked in some Dalvik
VM
- Added official Android copyright notices to all of the VM
code.
- Fixed implementation of "not-long", one of our
instructions that
has apparently never, ever been executed.
-
Added for multiple JDWP transports, paving the way
for
dt_android_adb.
- Fixed a couple of bugs in simulator
wrapper.
This week:
- Implement Java.lang.reflect.Proxy.
-
Update OKRs.
Jan 7, 2008
Last week:
- Worked on
Dalvik mterp.
- One interview.
- (Short week due to New Year
holiday)
This week:
- Continue work on mterp.
- Work with
veenstra to finish up Java/native profiling integration.
Jan 2,
2008
Last week:
- (Holiday vacation)
This
week:
- Work on mterp.
Dec 27, 2007
Last
week:
- Worked on Dalvik VM:
- Worked on
"mterp".
- Corrected reflection access check on protected
fields.
- Did some more directory renaming.
- One interview
candidate lunch.
This week:
- (Christmas holiday + two
vacation days)
Dec 17, 2007
Last week:
- Worked on
Dalvik VM:
- Split DEX file access code out into a static library.
Shifted
lots of code around.
- Added ability to run
"dexdump" on a Jar/apk/zip with "classes.dex"
inside.
- Added "dexlist" utility to list methods found in a
DEX archive.
- Added API for Dalvik-level instruction
counting.
- Changed internal exception throws to use
"descriptor" form of class name.
- Added additional access
check on protected field access through reflection.
- Stripped out some more
simulator cruft.
- Started learning Python.
This week:
-
Work on asm version of interpreter.
Dec 10, 2007
Last
week:
- Finished up filename remapping in simulator.
- Added
"fake" device entry for /sys/android_power entries.
- Removed last
bit of sim-specific stuff in libhardware.
- Added touch-screen support to
simulator.
- Added system property to enable Java language assertions in
Dalvik.
Added support for class/package name in -ea/-da.
- Fixed a bug
in Dalvik that could try to execute code in an
uninitialized class when
throwing an exception from JNI.
- Started on Dalvik instruction count
reporting
This week:
- Finish up instruction count
mechanism.
- Start on asm interpreter for Dalvik?
Dec 3,
2007
Last week:
- Worked on Dalvik VM:
- Fixed
a bug with multiple re-initializations of a class that fails to
load.
- Fixed a bug with null references in reflection
code.
- Corrected float-to-int conversions.
-
Investigated "can't create 764 threads" issue.
- Created an
alternative implementation of system properties for simulator.
- Worked on
transparent filename remapping in simulator.
- Renamed a couple of maJor
directories in the source tree.
- (one interview)
This
week:
- Finish sim filename remapping.
- Work on Dalvik
stuff.
Nov 26, 2007
Last week:
- Got basic set of
fake drivers (display, input, logging) working with
simulater. Also
implemented "vibrating notification mechanism".
- Removed a bunch
of sim-specific code.
- Fixed a bug in JNI local references
- Chased
down an incorrect exception thrown from native code when
''inflate'' sees
bad data.
- (Out Thursday/Friday for Thanksgiving)
This
week:
- Continue work on sim, notably system properties and filename
remapping.
Nov 19, 2007
Last week:
- Celebrated the
public launch of the Android SDK.
- Read an unhealthy number of blogs, news
articles, and press releases.
- Worked on simulator evolution:
-
Moved simulator communication channel out of runtime and into preload
lib.
- Got ''fake device'' infrastructure working.
- Got
most of /dev/graphics/fbO, /dev/ttyO, and /dev/input/eventsO working.
-
Chased after the "Binder thread explosion" bug.
This
week:
- Finish up /dev/input/eventsO.
- Write /dev/log/*.
-
Start on filename substitution.
Nov 12, 2007
Last
week:
- Reviewed patent application.
- Removed various incarnations
of the "J word" from the SDK.
- Began simulator overhaul: launch
runtime in separate xterm, with
LD PRELOAD wrapper. Removed
"ui-hardware" classes and interfaces.
- Fixed ''ls -R''
behavior.
- Fixed bug in dmtrace (nee jtrace) profiling.
- Various minor
changes to prep for SDK launch.
This week:
- Continue
simulator work.
Nov 5, 2007
Last week:
- Spent some
time configuring a MacPro as a Linux build machine.
- Worked with ]parks and
mathias to get the Linux simulator working agaln.
- Stripped out some
simulator cruft.
- Started fiddling around with planned simulator
updates.
- Last-minute stuff for M3.
This week:
- Continue
work on simulator evolution.
- Read lots of news articles.
Oct 29,
2007
Last week:
- Added binary event log output to
"logcat". Fixed the binary logging
implementation. Added a log
tag map.
- Worked on Dalvik VM:
- Reduced overhead when calling
into the interpreter.
- Rearranged EXPORT_PC handling so we do less
work.
- Made the main VM thread more generic, so that it's possible
for
other threads to join() on the maln thread.
- Fixed bytecode
verification when finding the best superclass of
two array
classes.
- Show more detail when a finalizer throws an uncaught
exception.
- Ensure existing processes blow up if you replace one of
the core
Java classes.
- Added bytecode disassembly to
"dexdump" tool.
This week:
- Continue with Dalvik
stuff.
- Look into making the simulator build more device-like.
Oct
22, 2007
Last week:
- Resurrected stand-alone benchmark test
app.
- Worked on Dalvik VM:
- Improved verification of
invoke-super. Removes need for a runtime test.
- Changed verification
to switch off of a propery, rather than an #ifdef.
- Reduced
thread-local storage lookups by passing a pointer around
in
performance-critical areas. Sped up JNI and synchronized blocks.
- Pushed
for (and got) a decision on how we're fixing our IPC mechanism.
-
Participated in a promotion & slotting committee (29
candidates).
This week:
- Continue Dalvik performance &
correctness changes.
Oct 15, 2007
Last week:
- Wrote
up proposal for Binder driver replacement. Discussed with a few people.
-
Helped track down some JNI global reference leaks.
- Pursued the "slow
classloader" problem (identified, partially
addressed with a ZipEntry
change, redirected to core Java lib) .
- Purused the "uncaught
exceptions don't work" problem (identified,
redirected to framework)
.
- Worked on Dalvik VM:
- Refactored the ''instanceof'' cache
into a more general mechanism.
- Used the cache to speed up interface
calls.
- Correctly handle virtual calls to abstract methods
(for
out-of-sync Jar files).
- Updated some developer
docs.
This week:
- Promotion/slotting committee.
-
Continue with Dalvik stuff.
- Get IPC replacement figured out.
Oct
8, 2007
Last week:
- Added feature in VM that copies
stdout/stderr to log file.
- Made a couple minor changes to help others
debug problems.
- Switched to IPC rewrite full time.
- Wrote some
code for the previous design (not checked in) .
- Became concerned
about scheduling and started thinking about
alternate plans.
This
week:
- Finalize what we're doing with IPC.
Oct 1,
2007
Last week:
- Worked on Dalvik VM:
- Added some
static tests to Java verifier. Rearranged failure
logging to reduce output
size.
- Enabled the Java bytecode verifier.
- Generalized
the reference table mechanism. Use the "expandable"
mode for JNI
global refs and some GC heap stuff.
- On thread detach, release all
monitors entered via the JNI
MonitorEnter function.
- For JNI
compliance, fail if somebody tries to detach a thread with
Java frames on
the stack.
- Added JNI GetObJectRefType method. We should be JNI 1. 6
compliant now.
- Followed up on digit's TCP_NODELAY discovery by running
some
experiments and then disabling Nagle in DDMS and VM JDWP.
- Spent
some time with crazybob talking about the IPC implementation.
- Helped some
people figure out issues uncovered with -Xcheck:Jni.
- Followed up on a
couple of pioneer issues ("bad" APK hosing boot
process,
ServerSocket not closing properly).
- Finished peer reviews.
This
week:
- Investigate interface call speedup.
- Clean up some stuff
in the VM.
- Help out with memory leak issues.
Sep 24,
2007
Last week:
- Worked on Dalvik VM:
- Implemented
some slower but EABI-correct register-access
primitives in
interpreter.
- Implemented a "fast path" in the AR11 native
JNI call bridge to
make things faster under EABI.
- Fixed
initialization of Java.lang.Class.
- Tweaked thread dumps to help with
system debugging.
-Fixed some minor stuff in Java libs.
- Forced
"check JNI" to be enabled. Dealt with the ensulng hilarity.
-
Chased after a couple of memory leaks.
- Read through some "new
IPC" stuff from crazybob.
- Worked on performance peer reviews
(six).
- Mentor for Andy Stadler.
- (Got caught up after
vacation)
This week:
- Finish peer revlews.
- Work with
crazybob on "new IPC".
- Deal with whatever comes up.
Sep
17, 2007
Last week:
- (out on vacation)
This
week:
- Get caught up on current events.
- Enable
verification.
- Write static verification tests.
- Work on perf review
stuff.
Sep 10, 2007
Add snippet
No snippet
submitted
Sep 4, 2007
Last week:
- Worked on Dalvik
VM:
- Made "-Xverify:{none,remote,all}" do what they should.
Got
verification working end-to-end.
- Rearranged optimization to
respect "-Xdexopt: {all,verified}".
- Added some code to force
optimization+verification of class files
when the system first boots. This
reduces the delay seen on first app
launch.
- Worked on performance
revlew.
- (Out Friday)
This week:
- Monday was holiday, in
Tuesday, away Wednesday-Friday. Mostly
trying not to break
things.
- Out all next week too.
Aug 27, 2007
Last
week:
- Worked on Dalvik VM:
- Rearranged class loading to
perform verification on
non-pre-verified classes.
- Enabled
"lite" verification; code flow analysis still too slow.
-
Corrected handling of package-scope access checks during
opt/verify.
- Added page access guards on LinearAlloc regions to help
track down
an EABI memory corruption bug.
- Expanded set of JNI
calls you're allowed to make with an exception
pending (1.6
spec).
- Updated Jni.h to remove some fancy new warnings.
-
Added flags to disable signal catching.
- Partially restored the stand-alone
performance tests.
- Took some measurements with and without mkf's SSA
optimizations.
- Spent some time examining the performance of JDWP to the
device and emulator.
- Attended the Android coming-out tech
talk.
This week:
- Work on performance revlew.
- Improve
performance of verified code flow analysis.
- Add some static verification
tests.
Aug 20, 2007
Last week:
- Worked on Dalvik
VM:
- Finished development on bytecode structural verifier. Added
more
detailed checks on short integers. Corrected common superclass
determination. Reduced memory usage and improved speed.
-
Blocked optimization and pre-verification of classes defined ln
multiple DEX
files.
- Eliminated VMThrowable class, folding it into
Throwable.
- Added logging of exceptions thrown from
finalizers.
- Added printLoadedClasses to help with Zygote performance
examination.
- Fixed a bug that would cause Eclipse to break on caught
exceptions
that straddled a native call.
This week:
-
Continue static verification work. Enable (warn-only mode) in live
system.
Aug 13, 2007
Last week:
- (away on
vacation)
This week:
- Get caught up.
- Finish bytecode
verification.
- Address some memory profiling analysis needs.
Aug
6, 2007
Last week:
- Worked on Dalvik VM:
-
Continued work on verifier. Code-flow analysis is complete, but
we've
decided to extend it slightly beyond what the spec requires.
- Fiddled
with exception logging to help track down excessive
exception
activity.
- Aligned array objects for EABI.
This
week:
- Out on vacation all week.
Jul 30, 2007
Last
week:
- Worked on Dalvik VM:
- Made good progress on bytecode
verifier.
- Moved uncaught exception handling for the main thread into
the
thread-detach code.
- Fixed Class.newinstance to do access
checks properly (Noser).
- Fixed some reflection exception handling
problems exposed by jython.
- One phone screen.
This
week:
- Continuing on with the verifier.
Jul 23,
2007
Last week:
- Worked on Dalvik VM:
- Worked on
bytecode verifier.
- Changed the way internal exceptions are
initialized to match
expected behavior.
- Added JNI vfprintf() and
abort() hooks.
- Fixed up some stuff from the Noser integration.
-
Filed several bugs on improper use of JNI NewGlobalRef in our sources.
- One
interview.
This week:
- Continue work on
verifier.
Jul 16, 2007
Last week:
- Worked on Dalvik
VM:
- Continued work on Java bytecode verifier
- Found last
week's heisenbug (gcc-4.2.0 bug)
- Worked with others to chase mise bugs
(cheese-scrolling throw-fest,
spinning Spinner, Bitmap heap trasher,
sluggish Mac sim, nuance
DetachCurrentThread)
- (away on vacation
Friday)
This week:
- Continue Java bytecode
verifier
Jul 9, 2007
Last week:
- Worked on Dalvik
VM:
- Worked on some classfile verification stuff.
- Added
-Xverify option.
- Changed thread startup from spin-wait to condition
wait. Took
some thread startup timings.
- Enabled __ memcmp16()
and fixed some bugs in String.compareTo()
- Removed JamVM from the
build.
- Spent a bunch of time chasing a Heisenbug (771329).
-
(Wednesday was a holiday)
This week:
- Continue chasing the
Heisenbug.
- Work on Java class verification.
Jul 2,
2007
Last week:
- Dalvik VM:
- Varicus improvements
to JDWP debug support (simplified startup, "server~n")
-
Fixed a bug in stack overflow exception handling.
- Changed frame
depth calculation to improve single-step execution
performance.
-
Added some additional tests to -Xcheck:jni.
- Fixed a stall in DDM
initialization.
-Fiddled with LD_ASSUME KERNEL for our goobuntu
systems.
- Worked on my OKRs.
This week:
- Start work on
Java classfile verifier.
Jun 25, 2007
Last week:
-
Worked on Dalvik VM:
- Finished EABI-compliant JNI call bridge (in
ARM assembly).
- Aligned long/double fields on 64-bit boundaries by
reshuffling field order.
- Wrote replacement 64-bit arg decoder for
internal natives.
- Fixed a rare bug that hit when a debugger attached
at the wrong moment.
- Fixed a bug that could lock up a VM if DDMS was
left connected for too long.
- Reduced class lookup-by-name calls by
caching a reference to [Foo in Foo.
- Experimented with a JDWP speed
improvement (which didn't work).
- Fixed an fd leak in DDMS.
- One
interview.
This week:
- Work on Dalvik.
- Figure out some
OKRs.
Jun 18, 2007
Last week:
- Worked on Dalvik
VM:
-Reduce native heap usage in Zip archive support.
-
Fixed some VM startup ordering issues that were blocking Noser.
-
Wrote a simple linear allocator to hold bits and pieces of class
files
- Made the VM-internal hash table load factor adJustable,
and
tweaked it for better performance.
- Allocate Java thread
stacks with mmap () instead of malloc () .
- Started work on ARM EABI
support.
- Chased down some JNI problems for Nuance that turned out to be a
bug
in our dynamic linker.
- One interview.
This
week:
- Finish ARM EABI support in Dalvik.
Jun 11,
2007
Last week:
- Added ZipFileRO, an extremely
memory-conscious Zip archive access class.
- Replaced all device-side usage
of ZipFile/ZipEntry classes with ZipFileRO.
- Evaluated correctness &
performance of mathias' __ memcpy16.
- Remove system class loader from app
loader call sequence.
- Worked on Dalvik VM:
-Implemented
Java.lang.reflect.Method.getExceptionTypes(), now that
we have exception
lists in DEX.
- One phone screen.
- (Out Thursday/Friday on
vacation)
This week:
-Continue with some Dalvik memory
footprint reduction and performance stuff.
Jun 4, 2007
Last
week:
-Moved to a new office.
- Worked on Dalvik VM:
-
Improved spin-on-suspend handling.
- Added support for Java thread
priorities. Added missing pieces of
Thread/ThreadGroup.
- Added
AccessController and ProtectionDomain features, notably
the
getStackDomains() method, for Noser security work.
- Explored
alternative stack allocation methods.
- Fixed a JDWP bug.
- Two
interviews (one cancelled shortly before it started) .
- (Monday was
holiday)
This week:
- Work on reduced-heap Zip support.
-
(On vacation Thursday/Friday)
May 29, 2007
Last
week:
- Worked on DalvikVM:
- Sped up native
calls.
- Wrote inline versions of String.equals() and
String.compareTo()
(6-40x faster than Java).
- Changed
DEX file section alignment to 64-bit for pending EABI changes.
-
Added "-Xss" flag, use it to set default stack
sizes.
- Rearranged the wait-for-suspend code.
- Added
TRACE_ALLOC_COUNTS flag to jtrace. If set, the allocation
counters are
written into the key file.
- Added some misc fields (total calls, syscall
benchmark) to jtrace key header.
- Met with patent lawyers.
- One
interview.
This week:
- Dalvik VM performance &
correctness.
May 21, 2007
Last week:
- Worked on
Dalvik VM:
- Experimented with fixed register assignments in
interpreter core.
- Tracked down and fixed a bug in debugger method
invocation.
- Added Java.lang.Thread constructor that takes a stack
s1ze.
Corrected size bounds in VM.
- In DEX optimizer, replace
calls to ObJect.<init> with instructions
that are treated as no-ops in
standard interpreter.
- Added an "inline implementation"
instruction. Wrote inline
versions of String.length() and
String.charAt().
-Substantially rewrote "efficient Java"
document. Reformatted entire
document, edited existing sections, added new
material.
This week:
- Continue performance work.
May
14, 2007
Last week:
- Worked on Dalvik VM:
- Enabled
instruction rewriting in the DEX optimizer. Improves the
speed of virtual
method calls and accesses to instance fields.
- Wrote a cache for the
results of ''instanceof'' and ''checkcast''
operations. Iterated until
useful.
- Moved DEX class name lookup from a heap-allocated hash table
to
shared-memory storage.
- Changed a large number of functions
from "JValue blah ( ... ) to
"void blah ( ... , JValue* pResult).
This works out better on ARM, and
improves the performance of native methods
returning void (of which we
have many) .
- Added some JNI
performance and correctness tests.
- Replaced the JNI native call
bridge with a hand-coded ARM assembly version.
- Continued the quest for
Java readability.
- One phone screen.
This week:
- Jury
duty. Assuming I'm not called up:
- Continue Dalvik
- Add
some instrumentation features requested by jparks/veenstra/etc.
May 7,
2007
Last week:
- Worked on Dalvik VM:
- Completed
work on optimization of virtual fields and instance methods.
-
Reworked optimization mechanism to use fork+exec instead of just
fork.
- Added exception-wrapping to Java.lang.reflect.Method.invoke
implementation.
- Added an instruction counter to get a sense for
which instructions
are popular and which are going unused.
- Made
some minor performance tweaks.
This week:
- Continue Dalvik
performance work.
- Finish Java readability review work.
Apr 30,
2007
Last week:
- Worked on Dalvik VM:
- Reorganized
DEX file loading so that generation and caching of the
byte-swapped version
happens generally (i.e. not merely as a
side-effect of Jar extraction)
.
- Compute and store inter-DEX dependency information.
Re-optimize
files when a dependency changes.
- Examined VM
loaded-classes hash table performance.
- Fixed a problem with
debugger-initiated method invocations that
throw exceptions.
- Worked on
DDMS:
- Warp client selection when a VM is waiting for a
debugger.
This week:
- Finish up Dalvik field/method access
optimizations.
Apr 23, 2007
- Worked on Dalvik VM:
-
Removed most of the overhead associated with debugger support from
the
interpreter core, resulting in a ~30% speedup.
- Made miscellaneous
minor speedups (strict-aliasing, interpreter
size recuction) .
-
Tried some performance enhancements that didn't work.
- Made some
improvements to the performance tests.
- Worked on Dalvik VM: - Removed most
of the overhead associated with debugger support from the interpreter
core,
resulting in a ~30% speedup. - Made miscellaneous minor speedups
(strict-aliasing, interpreter size
reduction). - Tried some performance
enhancements that didn't work. -Made some improvements to the
performance
tests.
Apr 16, 2007
Last week:
- Worked on
Dalvik VM:
Spent a bunch of time fiddling with the
performance tests to try
to get a consistent set of meaningful
numbers.
- Improved performance by inlining part of
class/field/method/string
resolution.
- Moved some low-use values
out of the Method struct. Reduced heap
usage by 12 bytes per
method.
- Reduced the situations in which we initialize a class to
those
specified in the VM spec.
- Reshuffled VM source tree,
moving headers next to sources.
- Show debug info breakdown in
"dexdump -S".
- Fixed a bug that prevented strings in Object
arrays from
displaying nicely in the debugger.
- Worked on
DDMS:
- Changed "Halt" button to call Runtime.halt() instead
of
Runtime.exit (). Bypasses some of the exit processing.
- Cleaned up
some code for a readability review.
- Wrote up OKRs.
This
week:
- Continue Dalvik VM performance work.
Apr 9,
2007
Last week:
- Worked on Dalvik VM:
- Rewrote DEX
file loading to maximize use of shared memory,
reducing native heap
requirements.
- Fix a spin-on-suspend when a GC happens while a
profiled thread lS
waiting to exit.
- Worked on DDMS:
-
Cosmetic touch-ups on heap stats.
- Added a "cause GC"
button.
- Added space for native heap info.
- Provided a
work-around for slow log window performance under Mac OS.
- Wrote a
command-line Java performance measurement tool.
- Attended daily
"aardvark" release meetings.
This week;
- Continue
performance improvements,focusing on DEX file optimization work.
Apr 2,
2007
Last week:
- Worked on Dalvik VM:
- Added
"inflate" support to classes.dex loading.
- Investigated
debugger performance issues.
- Corrected VM internal hash table
implementation.
- Quick-reJect debugger connection attempts when one
is already connected.
- When waiting for a debugger, return after it
has connected and
been idle for a set period (to allow it a chance to set
breakpoints).
- Worked on DDMS:
- Show tid, status, utime, and
stime in the "threads" panel. Update
periodically.
-
Chased after some adb-related problems.
- Reviewed and updated
developer documentation.
Participated in "aardvark"
status meetings.
- One phone screen.
This week:
- Work on
Dalvik VM
Mar 26, 2007
Last week:
- Worked on
"ddms"
- Finished hooking up "preferences"
items.
- Added a color key to the heap map.
- Don't try to
scan the device if it's in the boot loader.
- Started work on
retrieving per-thread CPU usage stats.
- Worked on Dalvik VM
-
Prefer new pthread_cond_timedwait_monotonic() for ObJect.wait()
-
Allow global references table to expand.
- Implemented JNI direct byte
buffer calls.
- Reduced the VM's debug-level log output.
-
Implemented Java.lang.reflect.Field get/set calls.
- Fiddled with some
VM options after the first ever Dalvik
performance review. Toned down
paranoia on ''release'' builds to
improve device
performance.
Dalvik is now the default on devices.
This
week:
- Finish per-thread CPU stats in ddms.
- Dalvik VM
performance work.
Mar 19, 2007
Last week:
- Work on
DDMS
- Added preferences screens with JFace. Implemented most of
them.
- Improved the network I/0.
- Refactored client list.
Added "waiting for debugger" icon.
- Send the app name up
when it changes.
- Fixed some ordering issues when running Dalvik on
the device.
- Spent a day hunting down edge cases exposed by attaching
"Jdb" and
letting the system run.
This week:
-
Finish wiring up the DDMS preferences.
- Work on Dalvik VM (monotonic clock
waits, global ref table) .
Mar 12, 2007
Last week:
-
Worked on DDMS:
- Added it to the build. Got it working on
Macs.
- Added "debug selected VM" feature.
- Added
skeletal heap panel UI for dbort.
- Changed reply routing to allow for
generic "fail" packet.
- Added device screen shot
feature.
- Added device command output capture; used with
"dumpstate",
"dumpsys",and
"logcat".
- Fixed lots of little things in the UI.
-
Added Java "assert" statement support to both VMs.
- In Dalvik VM:
ignore breakpoints and other events while executing
code on behalf of the
debugger.
- In Dalvik VM: treat JNI warnings as fatal errors (with a
to-be-added
command-line option to mellow them out) Made "Check
JNI" the
simulator default.
- Spent some time at the "Android
boot camp" dry run.
- One interview.
This week:
-
Continue work on DDMS.
Mar 5, 2007
Last week:
-
Added thread creation/death notifications to DDM.
- Started work on DDM
server user interface. Spent most of the week on this.
- Added an "is
debugger connected?" feature and a "change JDWP listen
port"
feature to both VMs.
-Participated in ''client team sourcing event''.
-
One interview.
This week:
- Contine work on DDM.
Feb
26, 2007
Last week:
- Worked on DDM:
- Got enough
working to register Java "hello" message handlers on
both sides
and exchange data.
- Updated debugger pass-through to recycle client
connection when
debugger drops.
- Added DDMS support to JDWP
code.
- Added a couple of calls to our NIO implementation.
-
Helped reed/abliss chase after some resource leaks that presented as
global
reference table overflows.
- One phone screen
- (Monday was
holiday)
This week:
- Continue with DDM server and
client.
Feb 20, 2007
Last week:
- Fixed a number of
bugs in Dalvik and JamVM.
- Added file info to "jtrace"
output.
- Worked on DDMS. Currently shuffling packets around with
NIO.
- One phone screen.
This week:
- Continue work on
DDMS.
Feb 12, 2007
Last week:
- Implemented
per-thread and default uncaught exception handlers (in
both JamVM and Dalvik
VM) .
- Worked on Dalvik VM:
- Added support for
-Xrunjdwp/-agentlib:jdwp- options.
- Rearranged JDWP startup to allow
"suspend=y".
- Worked on Dalvik Debug Monitor design doc.
-
Started on Dalvik Debug Monitor server (ddms). Added SWT to main
build.
This week:
-Continue work on ddms.
Feb 5,
2007
Last week:
- Worked on Dalvik VM:
- Fixed bug
in libffi that only manifested on Linux/x86 with
optimizations
enabled.
- Implemented parts of ClassLoader.getResource().
-
Added DEX-in-Jar support to user-defined class loaders.
- Corrected
JNI AttachCurrentThread behavior.
- Corrected JNI FindClass behavior
to use system class loader rather
than bootstrap. This allows CLASSPATH to
be used for the initial
class.
- Check method return types in
-Xcheck:jni.
- Chased after misc bugs people found now that Dalvik is
more widely used.
- Added a few things that the "mauve" test
suite wanted.
This week:
- Implement "-Xrunjdwp"
args.
-Get ClassLoader.getResource() working.
- Continue to address
Dalvik issues as they arlse.
Jan 29, 2007
Last
week:
- Work on Dalvik VM:
- Added support for loading DEX
files from Zip archives to bootstrap
class loader.
- Added
local-reference abuse checking to -Xcheck:Jni. Fixed a
couple of problems
it found, reported others.
- Added libffi, so we can use PowerPC
macs.
- Announced general availability of Dalvik at group meeting.
-
(Out sick most of Friday)
This week:
- Work on Dalvik
VM.
- Work on resource loading.
Jan 22, 2007
Last
week:
- Dalvik VM:
- Finished work on initating class loaders
in Dalvik.
- Replaced the hold-all "u8" type with a union
throughout the code.
- Corrected some bugs in the JDWP implementation in
both VMs. Added
some missing features that IntelliJ required.
- Spent
most of Tuesday with visitors crom Korea.
- (Monday was
holiday)
This week:
-Roll Dalvik VM out to the soon-to-be
adoring masses.
Jan 16, 2007
Last week:
- Wrote a JNI
calling convention converter. Ran it against our
sources, which used
C-style JNI calls in C++ code.
- Dalvik VM:
- Reworked some VM
class loader innards.
- Did most of the work required to support
initating class loaders.
- Perf: write peer revlews.
- One
interview.
This week:
- Finish initiating class loaders
-
Meet with some Java people.
- Work on Dalvik.
Jan 8,
2007
Last week:
- More jni.h tweaks, mostly to make JNIHelp.h
work with either C or C++.
- Changed JamVM's RegisterNatives method to link
methods immediately,
rather than on first use.
- Override the class
loader in JNI FindClass while handling JNI_OnLoad.
-Fixed a couple of bugs
in the JDWP support.
- Work on Dalvik VM:
- Added basic class
loader support to VM. Added DEX file loading to
Java
ClassLoader.
- Added "lazy" JNI native method binding by
signature.
- Hooked up local variable table support for the
debugger.
- Improved debugger object registry (fewer registrations,
more
appropriate data structure).
- One interview.
- (four day
week)
This week:
- Performance revlews.
- Work on Dalvik
VM.
Jan 2, 2007
Two weeks ago:
- Enabled dynamic
library loading in JamVM and Dalvik VM. Corrected
ClassLoader handling in
JamVM per spec.
- Fixed some warnings found by -Xcheck:jni that I got tired
of looking at.
- Created C++ inline version of JNI calls. The thrill ride
of the season.
- (Friday was holiday)
One week ago:
-
(off for entire week)
This week:
- Continue C++ JNI
stuff.
- Continue System.loadLibrary work.
- Continue ClassLoader work
in DalvikVM
Two weeks ago: - Enabled dynamic library loading in JamVM and
Dalvik VM. Corrected ClassLoader handling in JamVM
per spec. - Fixed some
warnings found by -Xcheck:jni that I got tired of looking at. - Created C++
inline
version of JNI calls. The thrill ride of the season. - (Friday was
holiday) One week ago: - (off for entire
week) This week: - Continue C++ JNI
stuff. - Continue System.loadLibrary work. - Continue ClassLoader work
in
DalvikVM.
Dec 27, 2006
Add snippet
No snippet
submitted
Dec 18, 2006
Last week:
- Worked on Dalvik
VM:
- Got basic shared library loading working.
- Reduced
DEX file memory requirements by deferring some pieces to
load on
demand.
- Added initialization of static final string constants, and
some
reflection code needed to test it.
- Cleaned up
strict-aliasing issues.
- Ran some performance evaluations to see how
we were doing.
- Added more tests to -Xcheck:jni mode.
- Updated
jtrace code to stall thread exits when a trace is running.
This way we get
thread names and don't re-use thread IDs.
- Switched system from using Jam's
"jni.h" to Dalvik's. Fixed the
ensuing C++ type clashes.
-
Wrote self-review.
- One interview.
This week:
- Finish up
shared library loading (both VMs need work) .
Dec 11,
2006
Last week:
- Dalvik VM:
- Reworked some mutex
stuff to avoid GC race conditions.
- Reduced memory usage by loading
Positions, Locals, and Exceptions
on demand only.
- Added a
threaded-execution mode to the interpreter.
- Reserve some stack space
so we can correctly handle StackOverflowError.
- Added internal obJect
tracking to ensure we don't GC obJects
created by native VM code.
-
Enabled threaded execution in JamVM.
- One interview.
This
week:
- Performance self-review.
- Continue work on Dalvik
VM.
Dec 4, 2006
Last week:
- Work on Dalvik
VM:
- Added public/protected/package/private access checks on
method
calls and field accesses.
- Added JNI local/global
reference tracking.
- Added JNI Push/PopLocalFrame.
- Added
debugger obJect registry.
- Chased after a spin-on-suspend
issue.
- Added VM selection pop-up menu and a "check JNI" checkbox
to simulator.
- One interview.
This week:
- Continue work
on Dalvik VM.
Nov 27, 2006
Last week:
- Dalvik
VM:
- Added support for ''-Xcheck:jni'' and
''-verbose:jni''.
- Check JNI thread affinity, verify field type in
Set*Field calls,
and watch for inappropriate activity between
"critical" calls.
- Added
GetStringRegion/GetStringUTFRegion.
- Spent a day digging into Wonka.
-
(Out Thursday/Friday for Thanksgiving)
This week:
- Add JNI
local/global reference tracking to Dalvik VM.
- Improve Dalvik debugger
support.
Nov 20, 2006
Last week:
- Spent some quality
time with some newly-GPLed source code.
- Performance profiling (JamVM +
Dalvik VM) :
- Updated jtrace to show class loader
overhead.
- Added memory allocation counting.
- Added
wall-clock elapsed time to jtrace "key" file.
- Disabled
clock_gettime() on Linux desktop -- doesn't really work
on goobuntu.
-
Implemented a JDWP command that IntelliJ IDEA required.
- Dalvik
VM:
- Better handling for OutOfMemoryError.
- Updated some
JNI functions.
- One interview.
- (half-day "offsite" on
Thursday)
This week:
- Implement -Xcheck: jni in Dalvik.
-
Add JNI reference tracking.
Nov 13, 2006
Last week:
-
Implemented our "jtrace" method call profiling in Dalvik VM.
-
Spent some time QAing the Dalvik VM. Fixed a few problems.
- Filed a few
bugs about app/lib issues uncovered by valgrind.
- (Out sick for two
days)
This week:
- Evaluate newly-GPLed Java stuff.
-
Continue work on Dalvik.
Nov 6, 2006
Last week:
-
Work on Dalvlk VM:
- Got it building on all platforms. Added it to
the main build.
- Build it into the Android runtime, allowing run-time
selection of
Jam or Dalvik.
- Implemented JDWP debugger method
invocation.
- Iterated on bug fixes and missing functions until we
booted the
Android system into the home page.
- Continued
iterating until nearly all tests pass and applications
appear to run
correctly.
- Work on JamVM:
- Made JamVM's Class.newInstance more
restrictive, to meet the Java
spec. Updated a couple of tests that weren't
correct Java.
- One phone screen.
This week:
- Continue
work on Dalvik.
Oct 30, 2006
Last week:
- Worked on
DalvikVM:
- Implemented most of the JDWP notification events.
-
Fixed a bug and added some debug output to JamVM.
- One
interview.
This week:
- Try to get the system booting on
Dalvik.
- Implement JDWP remote method invocation (last item
for
feature-parity with JamVM).
Oct 23, 2006
Last
week:
- Implemented some Java class library stuff (notably
Properties.list()).
- Work on Dalvik VM:
- Added JNI reflection
methods.
- Implemented properties (init, cmd line
overrides).
- Started work on JDWP support.
- One interview and
one phone screen.
- Worked on OKRs.
This week:
- Continue
on Dalvik JDWP support.
Oct 16, 2006
Last week:
-
Work on DalvikVM:
- Rearranged exception handling to properly track PC
of current method.
- Finished up most of the work on JNI
stubs.
- One interview.
- Fixed a bug, and added a feature and new
tests for java.util.zip.
- Developed a set of Guava questions.
- One
interview.
This week:
- Work on DalvikVM:
- Finish
stray JNI functions
- Implement system properties
- Start in
on JDWP
Oct 9, 2006
Last week:
- Work on
Dalvik:
- Got most of the reflection support working (all of the stuff
we
appear to use) .
- Link Dalvik VM against lib]avavm to
get the classes its supports
(esp. Float, Double).
-
Implemented a few JNI methods.
- Three interviews (for Guava)
.
This week:
- Re-examine Dalvik exception handling.
-
Write more JNI stubs.
Oct 2, 2006
Last week:
-
Worked on Dalvik:
- Finished first cut at threads &
synchronization.
- Capture stack traces in exceptions, and convert for
display.
- Implemented Miranda methods.
- Started work on
reflection.
- Show stack trace on SIGQUIT.
- Participated in
Android "bug bash" day.
- One interview and one phone
screen.
This week:
- Work on Dalvik:
- Finish
reflection support.
- Start on JDWP.
- Dilligence
interviews.
Sep 25, 2006
Last week:
-
Dalvik:
- Got most of the basic language synchronization primitives
working.
Object.wait/notify/notifyAll, Thread.join,
and
monitorenter/monitorexit.
- Added source file & line
number to stack traces.
- Developed feature list for Q4
planning.
- Found timing problems in JamVM/klibc. Worked with jham to fix
them.
- Two lunch-escort interviews.
This week:
- Finish basic
thread & synchronization stuff (Thread. sleep, Thread.interrupt).
-
Save & display exception stack traces.
- Dump stack traces for all
threads on SIGQUIT.
Sep 18, 2006
Last week:
-
Implemented most of Java.lang.reflect.Array.
- Made some progress on
multi-dimensional array support in Dalvik.
- Attended (via phone) two
marathon design meetings.
- (Out all of Monday and parts of the rest of the
week while
recoverlng from shoulder surgery.)
This week:
-
Work on Dalvik. Finish multi-dimensional arrays, work on threading
and
synchronization.
Last week:
- Added method tracing
to JamVM, as the first cut at a Java profiler.
Worked with Jack on the
analysis tools.
- Spent some time examining the JamVM thread model.
Determined that
it's too fragile to adopt.
- Wrote up a long description
of the planned Dalvik thread model.
Shifted some existing code to use
it.
- (Monday was a holiday; out Friday for shoulder surgery)
This
week:
- (out Monday, recovering from surgery; working partial days for
most
of this week)
-Work on Dalvik thread stuff.
Sep 11,
2006
Add snippet
No snippet submitted
Sep 5, 2006
Last
week:
- Filled out Java.lang.ClassLoader. Created a system class
loader instance.
- Added "top 5" lists to garbage collector
output.
- Wrote Java method trace generator for JamVM to help track
down
performance issues. Wrote output formatting tool.
- Work on
Dalvik:
-Notify the ThreadGroup when a thread exits.
This
week:
- Work on Dalvik threads.
Aug 28, 2006
Last
week:
- Finished implementation of Java.util.zip.*.
- Started
working on Java.lang.ClassLoader.
- One interview.
This
week:
- Finish work on Java.lang.ClassLoader.
Aug 21,
2006
Last week:
- Started work on Java.util.zip.*
implementation.
- Wrote Inflater, Deflater, and appropriate tests.
-
Wrote or fixed some Java.io.* classes that the Zip stuff needed.
This
week:
- Finish up Java.util.zip.
- Start on
Java.lang.ClassLoader.
Aug 14, 2006
Last week:
-
Dealt with some class loader issues.
- Started work on
Java.util.zip.*.
- (Out 3 of 5 days; Friday was picnic)
This
week:
- Work on Java.util.zip.*.
Last
week:
- Implemented a fair bit of thread handling support in
Dalvik:
- Thread ID assignment.
- Ignore daemon threads when
contemplating exit.
- Wrote some docs on using JDB.
- Identified (by
inspection) some race conditions in JamVM, mostly
via
AttachCurrentThread.
-Created android-discuss mailing
list.
Next week:
-Mostly not in the office.
Aug 7,
2006
Add snippet
No snippet submitted
Jul 31,
2006
Last week:
- Continued work on Dalvik VM:
-
Implemented instance-of, check-cast, and allocation of
multi-dimensional
arrays.
- Finished implementation of System.arraycopy().
-
Implemented some math operations, "switch" statements, and
wrote
stub implementations of monitor enter/exit.. All Dalvik
instructions
are now handled.
- Got basic Thread support
working.
- Fixed some JNI issues in JamVM.
This week:
-
Continue work on Dalvik, primarily threads and synchronization.
Jul 24,
2006
Last week:
- Worked on Dalvik:
- Got interfaces
working.
- Finished exception handling (implemented "throw")
.
- Got Dalvik working in the new build system.
- Created
"libs/Javavm", for VM-neutral Java.* native methods. Wired
it into
JamVM.
- Converted native methods from half a dozen classes to
JNI.
This week:
- Continue work on Dalvik VM.
Jul 17,
2006
Last week:
- Worked on dalvik:
- Got most of
exception processing working.
- Improved method calls. Got JNI
invocation of native methods
working (something of a hack) .
-
Implemented class initialization (i.e. invoke <clinit>).
-
Implemented class and instance field get/put.
- Worked on JamVM:
-
Moved JamVM-specific native functions into jamvm's "glue"
dir.
- Updated system init so that the right stuff is initialized at
the
right time.
- Changed Throwable to use StackTraceElement and
other standard
stuff. JamVM implementation now uses JamVM-provided
natives.
- Fixed a bug in JamVM exception handling.
- Added
per-thread Java instruction counting to track down spinning
threads.
This week:
- Continue work on Dalvik.
Jul
10, 2006
Last week:
- Worked on Dalvik.
-
Implemented several instructions, notably "invoke-direct"
and
''invoke-virtual''.
- Implemented native method
calls.
- Got "hello, world" working.
- Reported
& verified some jx bugs for danfuzz.
- Fix the way exceptions are
reported to the debugger in JamVM (stop
at exception, not in catch block)
.
- (three-day week)
This week:
- Continue work on
Dalvik.
- Investigate some JamVM issues.
Jul 5,
2006
Last week:
- Worked on Dalvik VM.
- Implemented
arrays and strings.
- Implemented obJect allocation.
-
Defined stack frames. Implemented native->Java calls.
-
Implemented a few Dalvik instructions. The VM is officially executing
code.
This week:
- Implement more instructions, especially
"invoke".
Jun 26, 2006
Last week:
- Worked
on Dalvik VM.
- Developed & discussed for how DEX files will be
managed.
- Wrote large pieces of class
loading/linking/initialization.
- Wrote self-evaluation for semi-annual
revlew.
- Conference call with VM company.
- (Engineering offsite on
Thursday.)
This week:
- Continue work on Dalvik VM.
-
Write peer reviews as required.
Jun 19, 2006
Last
week:
- Progress on Dalvik.
- Got lots of loading/linking
stuff figured out.
- Tracked changes to DEX file format.
-
Created some trivial classes to feed to "jx" for testing.
- Added
obJect allocation logging to JamVM.
- Updated "google
resume".
This week:
- Continue on Dalvik.
-
Finish loading/linking.
- Start on static initialization.
Jun
12, 2006
Last week:
- Worked on Dalvik VM core
infrastructure.
- One interview.
This week:
- Continue working
on Dalvik.
Jun 5, 2006
Last week:
- Corrected the
implementation of the JNI invocation functions I wrote
for JamVM. They're
now compliant with the JNI spec.
- Fixed some minor issues in JDWP.
-
Tried to figure out why Eclipse sometimes ignores breakpoints. Failed.
-
Added openNonAsset() to AssetManager. Fixed potential race condition.
-
Wrote JNI stubs for Dalvik.
- Made some progress on parsing Dalvik class
files.
- (Monday was a holiday; took Tuesday as a vacation
day)
This week:
- Continue work on Dalvik.
Last
week:
- Rearranged the way threads get started in our system.
Switched
thread creation and VM initialization to use JNI. Reduced
complexity.
- Moved native call registration so that it's initiated from
Java.
- Fixed a race condition in JDWP code.
- Experimented with JamVM
performance optimizations. Not much of a Wln.
- Started evangelizing
"application exit".
- Wrote some initialization code for the
Dalvik interpreter.
- (Away on vacation on Friday)
This
week:
-Fix some JNI stuff.
- Continue work on Dalvik
VM.
May 30, 2006
Add snippet
No snippet submitted
May
22, 2006
Last week:
- Finished changes to asset manager.
-
Enabled JNI in JamVM. This required writing some functions that
were in the
spec but not implemented.
- Switched to JNI calls in our code for VM
initialization and logging.
- Began public encouragement of JNI over
JamVM-proprietary interfaces.
- Started unraveling some thread stuff, with
the ultimate goal of
switching to JNI calls.
- Enhanced the ThreadGroup
support in JamVM, in our class libraries,
and in the JDWP debug code. now
properly categorizes the
threads.
This week:
- Switch our
thread creation over to JNI calls (requires implementing
those JNI calls in
JamVM) .
- Evangelize clean process exits for memory leak detection.
-
Do the Dalvik?
May 15, 2006
Last week:
- Finished
hunting down the bug from hell.
- More goodies for JamVM
debugging:
- Fixed up wait-for-debugger function.
- Added
breakpoints on exceptions and class loading.
- Added method invocation
(virtual/non-virtual/static)
- Fixed a race condition in JamVM thread
handling.
- The asset manager is going to package stuff up differently
now.
Updated the documentation and started in on the code.
This
week:
- Finish asset manager changes.
- Investigate JamVM
performance features.
- Do some stuff on Dalvik.
May 8,
2006
Last week:
- Lots of progress on debugger:
-
Implemented single-step modes.
- Correctly handle interface
classes.
- Increased the ThreadGroup kluge factor to improve support
for
other debuggers.
-Added waitForDebugger() for early-process
debugging.
- Spent two days chasing a bug (with help from others). Chased
it
into a corner.
-Two interviews.
This week:
- Finish
tracking down the mystery bug (which looks like a JamVM
multithreading
problem) .
- Add support for exception traps in debugger.
May 1,
2006
Last week:
- Lots of progress on Java debugger,
notably:
- Implemented "run to line".
- Got
connection to debugger on device working.
- Fixed some problems with
display of obJects, arrays, and strings.
- Reduced debugger overhead
in VM.
- Chased down four problems associated with JamVM. (One bug in
the
VM, one in my debugger support, one ln ARM pthreads, one in
Skia
glue.)
- Announced general availability of debugger to group.
Added notes to
klobag's Eclipse doc.
-Two phone screens.
This
week:
- Get single-step modes working.
- Add exception
traps.
Apr 24, 2006
Last week:
- Made lots of progress on
Java debugging. Now working in Eclipse and JDB:
- Inspection of
fields, variables, and arguments.
- Generic breakpoints.
-
Method entry/exit notification.
- Wrote "jdwpspy" tool as part of
figuring out why the debuggers didn't like me.
- Moved into bldg
44.
This week:
- Continue work on debugging. Need "run to
cursor" and must reduce
performance impact of breakpoints.
Apr
17, 2006
Last week:
- Made good progress on Java debugger
support. Suspend/resume and
stack traces work from Eclipse and jdb.
-
Fixed gdb/Jamvm hang.
- Minor tweaks to Dalvik (md5-->sha1+adler32)
-
Two interviews and one lunch escort.
- Packed up to move to bldg
44.
This week:
- Unpack.
- Continue work on Jamvm [ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Sunday, May 20 2012 @ 04:31 PM EDT |
From: hr-help@google.com
To:
fadden@google.com
Cc:
Bcc:
Sent: 12/11/2006
3:55 PM
Subject: Googlee Perf Confirmation
Hi Andy
McFadden
Thank you for submitting your self assessment! We have
recorded the following assessment for your 2006
Annual.
Accomplishments: Please summarize your overall performance and
most significant accomplishments this year.
For the first half of the
year (taken from the mid-year review):
-Taught myself
Java.
-Added debugger support to JamVM (an open-source Java virtual
machine). Developed an implementation of the Java Debug Wire Protocol (JDWP) in
C. Added appropriate hooks into JamVM, which had zero debugger
support.
Wrote tools to find debugger/VM interaction problems. Partway
through this I (unofficially) took ownership of JamVM, and took responsibility
for tracking down bugs that were impacting the group.
-Designed,
implemented, and documented the "asset manager", which is used for
accessing read-only assets (fonts, images, sound files, localized text) on the
Android device. Wrote the corresponding asset packaging tool
("aapt").
For the second half of the year:
-Wrote
the Dalvik VM from scratch. This is a Java VM that executes Dalvik bytecodes. I
wrote everything except the garbage-collecting memory allocator (classes,
objects, strings, arrays, bytecode interpreter, threads, exceptions, JNI, JDWP,
VM-dependent natives, etc.). We will have feature parity and similar performance
to JamVM by the end of December.
- Java performance work. Added
method-trace profiling to the VMs, and wrote a tool to convert it to
human-readable form. Added some memory allocation statistics. Worked with the
"Turtle Team" to improve data gathering.
- Since January 1st,
I have completed 30 on-site interviews, 8 phone screens, 4 candidate lunch
escorts, and the half-day interview training class.
Strengths: What do
you consider to be your top 3-5 work-related strengths?
- I own things
that need owners. For the first half of the year I owned the build system, and
actively supported it.
While I usually defer to danfuzz's Java expertise, I
am the de facto owner of and "go to guy" for all of our VM technology.
I have evaluated Java technology for inclusion, and worked --of necessity, from
afar --with teammates doing due dilligence on Java technology
acquisitions.
- I don't cling to things that want to leave the nest.
The build system is now owned by joeo, the asset manager by hackbod, and pieces
of the Dalvik VM are owned by dbort. I worked with the developers during the
transition.
- I write good code. It does what it's supposed to, and is
well commented. (The Dalvik VM sources have extensive descriptions of
"why" as well as "what".) I fix bugs as they come up, even
if they're not related to the feature I'm currently working on.
- I
adapt to changing situations. Toward the end of 2005 and the start of 2006 we
hired multiple people with application infrastructure and system design
experience. I shifted my focus to Java VMs because we had far less coverage in
that area. I went from writing "hello, world" in Java to booting the
Android system on a VM written from scratch in less than a year.
Areas
for Development: What are the major 3-5 areas that you think you can improve
upon, and how do you plan to develop these areas?
- Need better
familiarity with Java, in the grand sense. For example, I still know little
about various acronymed technologies (CDC/CLDC, MIDP), and lack the ability to
rattle off JSR numbers.
- Need to learn about VM optimization. This is
in both the architectural sense, e.g. what tricks can be used to speed things
up, and in the coding sense: I'm not sufficiently well-versed in assembly
language on a modern CPU to do anything but damage.
- I could take a
more active role with some of our new-hires, e.g. be a
mentor.
OPTIONAL- Slotting: You may be slotted during this review to a
position best matching your performance. What position do you think you should
be slotted to? Staff Software Engineer
Please provide any additional
explanation to help managers and slotting committees to best evaluate what
position is most suitable for you at this time.
I am capable of
performing, and in the past have performed, at the level of a Staff Software
Engineer (level 6).
My current job responsibilities are closer to that
of a Senior Software Engineer (level 5), because that's the role that needs to
be filled.
Thanks!!
-Your Friendly Perf Team
[ Reply to This | Parent | # ]
|
|
Authored by: indyandy on Monday, May 21 2012 @ 01:26 AM EDT |
[Ed:
1 This is the Resume of Andrew McFadden as downloaded (printed?) on
5/1/2011 (according to the footer on the pdf)
2 At time of transcription
this document was available online at http://www.fadden.com/resume.html. The
online version has correct formatting and working hyperlinks. This
transcription uses minimal formatting and has no
hyperlinks.
]
Andrew T.
McFadden
fadden@fadden.com
http://www.fadden.com/resume.html
(Please bear in mind this was
initially thrown together for a couple of informal interviews, not carefully
crafted for a
formal presentation.)
Skills
Things I'm
really good at:
C/C++
UNIX
(Linux, Solaris, SunOS, others)
Writing lots of solid
code while under pressure
Debugging
Things I've
done a little of recently or a lot of a while back:
Java
ARM assembly (ARMv5TE+)
Windows programming (Win32 API, including MFC, with some C#
.NET)
Things I used to be really good at, and could be
again:
6502/65816 assembly language (Apple ][/IIgs,
SNES)
Employment History
Android, Inc. / Google, Inc. -=- May
2005 - present
Senior Software Architect at Android. The company
was acquired by Google in July 2005.
After the acquisition I continued
to be part of Android mobile software development. Responsibilities and
achievements:
Primary developer of the Dalvik
virtual machine runtime. Wrote 85-90% of the code,
notably:
Bytecode
interpreter, in C and ARM
assembly.
Class loader,
object model, native threads, basic
synchronization.
"Inter
nal" library features, like reflection and proxy
classes.
Native method
access (JNI).
Bytecode
verifier and register maps (to support type-precise
GC).
Developer features:
remote debugger support (JDWP), method profiling, deadlock
prediction.
(In short, wrote
nearly all of the features found in Android 1.0 - 1.6, except for the
garbage-collected heap and a few odds and ends.)
Wrote
developer documentation on VM-related topics.
Created the
first incarnation of DDMS, a GUI app that manages the connection between a
debugger and multiple Dalvik VMs running on a device. (This was later converted
to an Eclipse plug-in and built into the Android SDK.)
Developed the Android "simulator", a GUI front-end that allows Android
software to run directly on a Linux desktop. (This significantly pre-dated the
Android "emulator", which now ships with the SDK.) The hardware
abstraction was later improved by using a pre-load library that patches various
library and system calls.
Learned Java, Javascript,
Python, ARM assembly, SWT, and wxWidgets when I needed to use
them.
Actively supported Android developers on mailing
lists.
FaddenSoft, LLC -=- August 2002 - May 2005
Founder,
member, chief architect, and head dish washer. I worked on projects that
interested me and published them as freeware or shareware on the web, and
occasionally did contract work. Notables:
Technical
Consultant -=- March 2005 - April 2006
Provided
technical expertise to a law firm during software patent
litigation.
Akimbo Systems, Inc. -=- November 2003 -
December 2003
(Software engineering contract.)
Developed an event logging system in C# .NET. Developed an API for engineers to
use to log interesting events to a compact binary format. Wrote log harvesting
and aggregation servers, as well as tools for sorting and formatting event
logs.
CiderPress -=- initial release March 2003,
open-source March 2007
Developed CiderPress, a
Windows application for manipulating Apple II archives and disk
images.
Features include a full set of archive operations
(similar to WinZip) as well as Apple II-specific text and graphic file format
converters. The program uses low-level I/O operations to access Apple II hard
drives, floppy disks, CF cards, and CD-ROMs. Five different filesystems are
supported. The project was developed in C++ (about 100K lines of well-commented
source code), using Visual Studio 6.0 and the MFC library.
Moxi Digital
/ Digeo, Inc. -=- January 2000 - July 2002
Software architect and team
lead. Moxi built a set-top box featuring multi-tuner video recording, CD
jukebox, MP3 ripping and playback, DVD playback, and wired or wireless
distribution. The device went on to win Best In Show at the January 2002 CES
convention.
Moxi Digital was originally known as Rearden Steel
Technologies. It was acquired by Digeo in May of 2002.
Responsibilities
and achievements:
Part of the "Gang of
Five" that developed the detailed design of the hardware and software.
Developed detailed plans for application infrastructure, graphics and sound
architecture, "mother" services, and other
topics.
Part of a small group that defined the merged
Moxi/Digeo architecture after the acquisition.
Led a team
varying in size from 2 to 4 engineers. My group was responsible for application
infrastructure, graphics drivers, satellite and cable tuning, DVD playback, user
input, and porting Macromedia Flash (4.x and 5.x) to our
architecture.
Designed and implemented "Central
Services", the core of the Moxi application infrastructure. CS loaded apps,
managed access to graphics and video resources, handled user input devices, and
provided debugging hooks for developers (thread watcher, memory watcher, and a
graphical "control panel").
Designed and
implemented the initial version of the "RATI" library, a hardware
abstraction layer that proved to be extremely useful as the hardware
evolved.
Designed and implemented remote execution
wrappers with pseudo-ttys and network sockets. These connected to "xterm
servers" running on developer workstations, allowing developers to view the
output from multiple remote processes.
Managed the
relationship with one of our graphics chip vendors (ATI).
Gave presentations on different system components to vendors, potential buyers,
and internal folks.
NotifyMe Networks -=- January
2000
Software engineering contract (two weeks with ongoing advisory
relationship). Helped design the NotifyMe service.
Developed service
launcher and some service infrastructure libraries.
The NotifyMe
service used a bank of outbound phone lines to provide automated, interactive
customer notifications.
Target customers were corporations that wanted to
provide information to their customers and get simple feedback.
Examples
include online auction sites and furniture delivery companies.
WebTV
Networks, Inc. / Microsoft, Inc. -=- March 1996 - December
1999
Software engineer in the online service development group. WebTV
runs an online service, connecting users to the Internet with a television
set-top box. The service was initially written in C on BSDI, but was primarily
developed on Sun Solaris 2.x (SPARC).
WebTV was acquired by Microsoft
in August of 1997.
Primary
responsibilities:
Designed and implemented the WebTV
dialup infrastructure. The system automatically configures the set-top box,
selecting multiple dialup access numbers from several different Internet access
providers based on the customer's phone number. Selection process optimizes for
call cost (to customer and to WebTV) while load-balancing and attempting to
provide redundant access in case of IAP failure. Works for NANP (US/Canada) and
Japanese phone systems. Wrote tools to examine and manipulate telco data and
per-customer settings.
Designed and implemented the
client upgrade system. Three different classes of WebTV box are upgraded
automatically by the service as needed. ROM images are split into pieces,
compressed, and digitally signed before being downloaded.
Held general ongoing responsibility for several major service
components.
Other achievements:
Responsible
for implementing service support for new products, including EchoStar
"DishPlayer" and Thomson "eTV".
Developed offline e-mail access for two different classes of WebTV
client.
Implemented data compression algorithms for use
in client-service communication.
Developed pieces of the
early service infrastructure (handled system dependencies in build process,
added "fun" stdio, tweaked client connection handling, ported service
from BSDI to Solaris, etc).
Developed and maintained
service side of phone activity logs and box crash logs.
Wrote service documentation for pieces I developed, including a 70-page tome
providing a general overview of the dialup system, for use by engineering, QA,
network operations, and customer care (the "Greater Scroll of Dialing
Wisdom").
Plugged several security holes exposed by
users, and several more that weren't. Redesigned "tricks" service to
allow different levels of access for regular customers, outsourced Customer
Care, and internal users.
Most development had a high level of
visibility in Customer Care, Operations, and Business Development.
As a
result of my work at WebTV, I am named as an inventor on the following
patents:
US05838927 1998/11/17 Method and apparatus for
compressing a continuous, indistinct data stream
US05940074 1999/08/17
Remote upgrade of software over a network
US06023268 2000/02/08
Reducing latency while downloading data over a network
US06230319
2001/05/08 Managing interruption while downloading data over a
network
US06259442 2001/07/10 Downloading software from a server to a
client
US06317792 2001/11/13 Generation and execution of scripts for
enabling cost-effective access to network resources
US06473099
2002/10/29 Automatically upgrading software over a satellite
link
US06614804 2003/09/02 Method and apparatus for remote update of
clients by a server via broadcast satellite
US06779034 2004/08/17
Cost-effective access to network resources
Catapult Entertainment, Inc.
-=- August 1994 - March 1996
Software engineer in the online service
development group. Catapult created the XBAND Video Game Modem and Network, a
device and service that allowed owners of Sega Genesis and Super Nintendo
Entertainment System (SNES) consoles to play against other users over a phone
line. (Catapult was later purchased by Mpath Interactive, a/k/a
HearMe.)
Major feats:
Implemented a
significant portion of the service that Catapult launched with in mid-November
'94. Notably:
customer database, intra-service mail,
news, game matching, game result tracking and player ranking, game patch
management, build environment, logging, stat generation, and general network
infrastructure including RPC between server processes. Service was written in C
on SunOS 4.
Ongoing responsibility for much of the
service. Carried a pager, and fixed anything that broke. Continued development
on customer database, new game platform support, security, and client
interaction.
Lesser feats:
Implemented data
compression algorithms for use in client-service
communication.
Spent a month in Japan, adapting the
service for use with the SNES-J client.
Shared assorted
SunOS sysadmin duties with the rest of the team.
Highland Digital -=-
June 1994 - July 1994
Software engineer. Highland Digital was primarily
a Sun value-added retailer (VAR). They kept a small software
team to develop
products that addressed specific problems.
In
brief:
Ported various WWW tools to SunOS and
Solaris.
Set up highland.com web server.
Amdahl
Corp. -=- June 1991 - May 1994
Software engineer in the UTS System
Software Group. Amdahl built IBM-compatible mainframes and software to run on
them. UTS is Amdahl's mainframe UNIX product, based on SVR3 and SVR4. As demand
for mainframes slowed, Amdahl began to move toward Sparc-based
systems.
Things I did:
Ported and enhanced
utilities from AT&T's SVR4.x to UTS4.y.
Added new
system configuration and maintenance commands.
Made
changes to UTS4 kernel.
Ported public domain and
GNU-license software for internal use.
Debugged a lot of
strange situations.
Worked on A+Texture, which was
supposed to be a suite of applications for World Wide Web
development.
Enhanced NCSA Mosaic.
Outside
Projects
CD-Recordable FAQ -=- March 1996 - present
Created the
Frequently Asked Questions list for CD recording, starting with the list of
questions that I wanted to have answered.
The FAQ currently fills about 250+
pages (depending on how you print it), has been translated at various times into
Hungarian, Turkish, Italian, French, Russian, Spanish, German, Dutch, and
Chinese, and at its peak got several thousand visitors a day. Customer support
organizations at major hardware and software companies regularly referred
customers to it as a resource. I have been interviewed by various newspapers and
made a live appearance as a guest on TechTV's "Call for Help"
program.
The FAQ is converted from an ASCII text Usenet posting to an
indexed, multi-page HTML format using the "faq2html" program I wrote
for the purpose.
NufxLib and NuLib2 -=- February
2000
Designed, implemented, and documented a data archiving library and
application. The NufxLib library allows applications to add, extract, rename,
delete, and examine the contents of NuFX archives (popular in the Apple II
world, mainly for use with software emulators). NuLib2, a replacement for the
original NuLib (see below), is a command-line application implemented with
NufxLib. Both are available as source code on sourceforge.net under GPL
licenses.
HardPressed[tm] -=- March 1992 - July 1993
Designed
and implemented "HardPressed", a transparent file compression product
for the Apple IIgs. Project involved extensive patching of the operating system,
development of GUI user applications, and writing lots of code that had to be
absolutely reliable. Sold as a commercial product through WestCode
Software.
The complete source code is available here.
Hacking
Data Compression -=- October 1992 - January 1993
Developed a 12-part
online course for the GEnie online service, entitled "Hacking Data
Compression". The course taught compression theory and algorithm
implementation, focusing on lossless data compression for Apple IIgs
applications written in C or 65816 assembly.
Netrek Enhancements -=-
December 1991 - May 1994
Developed several enhancements to Netrek, a
multiplayer space combat game written for UNIX and the X window system. Among
them:
Implemented UDP networking code. Netrek was
originally written to use TCP/IP, and performed poorly over lossy connections.
To the best of my knowledge, Netrek was the first game that ever used UDP over
the Internet.
Developed a suite of server administration
tools, including a graphical observation and maintenance
tool.
Developed the "meta-server", which
provides up-to-date information on public server usage. (Looks like one is still
running on metaserver.netrek.org port 3521; telnet to
it.)
Wrote a curses-based player-list
editor.
Wrote a secure packet-passing daemon
("trekhopd") to allow gameplay across a bastion-host
firewall.
Created the Frequently Offered Clever
Suggestions (FOCS) list for would-be developers.
I gave a deposition
for the defense in a patent lawsuit (HearMe vs. Lipstream Networks re: US
5,822,523) where Netrek was used as an example of prior art. And again, when the
same patent came up in PalTalk vs. Microsoft.
Optical Disc Jukebox
Daemon -=- Spring 1991
Wrote a client library and server application to
control an optical disc jukebox that the Berkeley CS department had
acquired.
NuLib -=- Early 1989 - 1991?
Developed a
full-featured file archiver for use with Apple II ".SHK" archives.
NuLib was written in C and ported to a wide variety of different UNIX systems.
The program is still in use, mainly by Apple II emulator enthusiasts, though it
has largely been replaced by NuLib2.
Background
Graduated from the
University of California at Berkeley with a B.S. degree in Electrical
Engineering and Computer Science, May 1991.
Outside interests include
martial arts, currently Danzan-Ryu Ju-jitsu. As part of my martial training I am
certified in seifukujitsu (massage therapy).
I have been known to perform
certain acts of interior decoration.
Last updated:
2010/01/10
http://www.fadden.com/resume.html
5/1/2011
[ Reply to This | Parent | # ]
|
|
|
|
|