decoration decoration
Stories

GROKLAW
When you want to know more...
decoration
For layout only
Home
Archives
Site Map
Search
About Groklaw
Awards
Legal Research
Timelines
ApplevSamsung
ApplevSamsung p.2
ArchiveExplorer
Autozone
Bilski
Cases
Cast: Lawyers
Comes v. MS
Contracts/Documents
Courts
DRM
Gordon v MS
GPL
Grokdoc
HTML How To
IPI v RH
IV v. Google
Legal Docs
Lodsys
MS Litigations
MSvB&N
News Picks
Novell v. MS
Novell-MS Deal
ODF/OOXML
OOXML Appeals
OraclevGoogle
Patents
ProjectMonterey
Psystar
Quote Database
Red Hat v SCO
Salus Book
SCEA v Hotz
SCO Appeals
SCO Bankruptcy
SCO Financials
SCO Overview
SCO v IBM
SCO v Novell
SCO:Soup2Nuts
SCOsource
Sean Daly
Software Patents
Switch to Linux
Transcripts
Unix Books

Gear

Groklaw Gear

Click here to send an email to the editor of this weblog.


You won't find me on Facebook


Donate

Donate Paypal


No Legal Advice

The information on Groklaw is not intended to constitute legal advice. While Mark is a lawyer and he has asked other lawyers and law students to contribute articles, all of these articles are offered to help educate, not to provide specific legal advice. They are not your lawyers.

Here's Groklaw's comments policy.


What's New

STORIES
No new stories

COMMENTS last 48 hrs
No new comments


Sponsors

Hosting:
hosted by ibiblio

On servers donated to ibiblio by AMD.

Webmaster
0955.pdf as text | 96 comments | Create New Account
Comments belong to whoever posts them. Please notify us of inappropriate comments.
0005.pdf as text
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 | # ]

0020.pdf as text
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 | # ]

0027.pdf as text
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 | # ]

0258.pdf as text
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 | # ]

0292.pdf as text
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 | # ]

0294.pdf as text
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 | # ]

0302.pdf as text
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 | # ]

0955.pdf as text
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 | # ]

Groklaw © Copyright 2003-2013 Pamela Jones.
All trademarks and copyrights on this page are owned by their respective owners.
Comments are owned by the individual posters.

PJ's articles are licensed under a Creative Commons License. ( Details )