History log of /dalvik/vm/oo/Object.h
Revision Date Author Comments
3a874b4610df8c2623823dded604858448882109 22-Aug-2012 Brian Carlstrom <bdc@google.com> Revert "Ensure we fence the writing of clazz to an Object post allocation."

This reverts commit 821ab588af4566a800d4b5608092ccc1dd3764af.
3b93aad3e70c0b369ce922d92e5ab154320c401c 22-Aug-2012 Brian Carlstrom <bdc@google.com> Revert "Ensure we fence the writing of clazz to an Object post allocation."

This reverts commit 821ab588af4566a800d4b5608092ccc1dd3764af.
821ab588af4566a800d4b5608092ccc1dd3764af 22-Aug-2012 Ian Rogers <irogers@google.com> Ensure we fence the writing of clazz to an Object post allocation.

We hold the heap lock during the calloc of an object in the GCed heap.
We do a non-volatile store following this for the clazz, this may lead to a
race where an object is allocated but appears to have no clazz.

Found investigating Bug: 7028104

Change-Id: I390ad4c7b9632127bd27393742be347b84d9269a
95b0899ad3412596baa600b22ea2ecd7dd1acc43 04-Apr-2012 Evgeniy Stepanov <eugenis@google.com> Support building Dalvik with AddressSanitizer.

Change-Id: I007c5080081a4a66b39fa6b539afd8f00fd8ce0f
a6e94ff55517438569d207e3ed552c8c127bcac9 30-Jun-2011 Elliott Hughes <enh@google.com> Fix native method logging to show local references rather than direct pointers.

This is necessary (but not sufficient) for debugging third-party JNI bugs.
It's the second half of the logging story, but still doesn't address the
question of "how does the developer turn on the logging?".

This removes the variant JNI bridges at the cost of adding a couple of
booleans to struct Method. Performance is about the same, except synchronized
native methods are quite a bit faster after the change.

Before:
benchmark ns linear runtime
_emptyJniMethod0 333 ==========
_emptyJniMethod6 367 ===========
_emptyJniMethod6L 921 ==============================
_emptyJniStaticMethod0 259 ========
_emptyJniStaticMethod6 287 =========
_emptyJniStaticMethod6L 873 ============================
_emptyJniStaticSynchronizedMethod0 404 =============
_emptyJniSynchronizedMethod0 452 ==============

After:
benchmark ns linear runtime
_emptyJniMethod0 344 ==========
_emptyJniMethod6 348 ==========
_emptyJniMethod6L 969 ==============================
_emptyJniStaticMethod0 265 ========
_emptyJniStaticMethod6 293 =========
_emptyJniStaticMethod6L 968 =============================
_emptyJniStaticSynchronizedMethod0 265 ========
_emptyJniSynchronizedMethod0 323 ==========

A better optimization for the case where there are reference arguments
would be to keep a list of argument indexes in the struct Method, so we
could iterate directly over those arguments that need converting to
local references. That would also let us do something about the overhead
of repeatedly looking up which local reference table and cookie to use.

But now is not the time.

Change-Id: Ie32daca1b31be057a44f1ed4b5d28d1634380e1d
eba95c1c0b552d5dd18a7520e3dcc081cfac621c 23-Jun-2011 Elliott Hughes <enh@google.com> Fix native methods that weren't registered via RegisterNatives.

Cherry pick of a64af4aabf261d34eac8b5a9d92992ee70051829.

Change-Id: I43df4e33e39ccaf9e26c842f22da3391cfa17e2b
1a87dec67db6c5a37442c1338d9b8c626c95a545 23-Jun-2011 Elliott Hughes <enh@google.com> Fix native methods that weren't registered via RegisterNatives.

Cherry pick of a64af4aabf261d34eac8b5a9d92992ee70051829.

Change-Id: I43df4e33e39ccaf9e26c842f22da3391cfa17e2b
d8a3f9fa1951e552f5f65c2914689083cc0c46c2 18-Jun-2011 Elliott Hughes <enh@google.com> Make some of the StringObject functions member functions.

Change-Id: I72ed13c16f0cb24498772c453ba268a0f65f208a
375fb116bcb817b37509ab579dbd55cdbb765cbf 15-Jun-2011 Carl Shapiro <cshapiro@google.com> Normalize the include guard style.

An leading underscore followed by a capital letter is a reserved
name space in C and C++.

This change also moves any #include directives within the include
guard in some of the compiler/codegen/arm header files.

Change-Id: I9715e2c5301699d31886e61d0fe6e29483555a2a
65852761e37f938409b85a901a0fb1d98d361023 14-Jun-2011 Elliott Hughes <enh@google.com> Allow native methods to declare they don't need a JNIEnv*.

Bug: 3069458
Change-Id: Ic9a6c562c5abf9607dd4c8a71b0d1e389e6d340b
9c6f0a6a36fcce4a55e3764db45c6c7cced077a5 10-May-2011 Carl Shapiro <cshapiro@google.com> Fixes to allow the debug VM configuration to build.

Change-Id: Ifbe6acf84beb75014303152d20153072e7e50c55
a7323974309c3b81cfe342db635d0bf30f36ff62 07-May-2011 Carl Shapiro <cshapiro@google.com> Establish a subclass relationships among the field types.

Change-Id: Id349b359489bb6b1bbb4ab78d29d85c0e6b33799
dc2a1881fe75a8dd961fb24509621c7c97694c9a 06-May-2011 Carl Shapiro <cshapiro@google.com> Establish a subclass relationship between ClassObject and Object.

Change-Id: I9fb5d33f23ec7aeb2b9a3908d4125b34be0599ae
dc9e44cc0af797679822484d88ef76bff15ffc98 06-May-2011 Carl Shapiro <cshapiro@google.com> Make interned strings non-movable.

At present objects referenced from dex files must have stable reference
values. With this change, only non-moving strings are interned. If a
user interns a movable string a non-moving copy is made and the copy is
added to the intern table.

As part of this change, the internal string hash code access routine will
update the hash code slot of a string object. In addition, StringObject
has been made a subclass of Object eliminating various down-casts that
would otherwise be explicitly required.

Change-Id: I6b015b972aac44948470c0034ad17e5eef456aeb
a62c3a0ab3fcdde37f47d16e9699a935ae7a8e88 04-May-2011 Carl Shapiro <cshapiro@google.com> Establish a subclass relationship between ArrayObject and Object.

Change-Id: I9f9fe52bd4ceebb6dde48251a89190ba6bb00ce4
7cc095f8e3ec52ba94d91e1d327354f61236496a 03-May-2011 Carl Shapiro <cshapiro@google.com> Establish a subclass relationship between DataObject and Object.

Change-Id: Ifd0e364f7789d9e13f769f8d6a65c3c573915fd3
d862faa2ceae186da5518607505eb942d634ced9 28-Apr-2011 Carl Shapiro <cshapiro@google.com> Get rid of uneeded extern, enum, typedef and struct qualifiers.

Change-Id: I236c5a1553a51f82c9bc3eaaab042046c854d3b4
c67c23bc6f5f3621f31c41bd48553b196ab0325e 28-Apr-2011 Carl Shapiro <cshapiro@google.com> Eliminate the PROFILE_FIELD_ACCESS feature.

Change-Id: I27bf2d18c4c0735913ea8698825b05e393b046b2
122dac5b92c649b5d3182b163d7fce35e8c69d76 21-Apr-2011 Carl Shapiro <cshapiro@google.com> Remove DVM_LOCK_INIT and DVM_LOCK_INITIAL_THIN_VALUE.

The original implementation for thin locks used a magic non-zero value
to encode the initial thin lock state. This magic value was kept
around in DVM_LOCK_INITIAL_THIN_VALUE and stored into the lock word of
newly allocated objects. A later revision to the thin locking code
made the initial thin lock value be 0. That change eliminated the
requirement that lock words be explicitly initialized as the allocator
always returns zero-filled memory.

Change-Id: I34e0b43b4c4db0f45cf7cf524e15d4a6096c1365
c6d2470eec726ae0ad95e4fd2d9d7da7cb2cdcba 12-Apr-2011 Dan Bornstein <danfuzz@android.com> Add a class flag CLASS_ISCLASS.

This flag is only turned on for the unique class Class, and it is
meant to make it possible to quickly test objects for "classiness" as
well as trivially figure out if one is looking at the class Class
itself.

Bonus: Made a few places that directly set class->accessFlags use
the prescribed macro for doing same.

Change-Id: I89fce708c407b597f28ce610b778123f5dcaecf6
ae188c676c681e47a93ade7fdf0144099b470e03 08-Apr-2011 Carl Shapiro <cshapiro@google.com> Compile the garbage collector and heap profiler as C++.

Change-Id: I25d8fa821987a3dd6d7109d07fd42dbf2fe0e589
3475f9cdb47a6d6f8ad2ce49bbc3af46bca92f09 21-Mar-2011 Carl Shapiro <cshapiro@google.com> Move finalization out of the VM.

This change introduces a new reference class whose referent
points to instances requiring finalization. This makes the
finalization of objects possible using a reference queue and
a dedicated thread which removes objects from the queue.

Change-Id: I0ff6dd272f00ca08c6ed3aa667bf766a039a944e
a9c49df6714b3a37b7a7d0522932e622be2b35ac 11-Mar-2011 Dan Bornstein <danfuzz@android.com> Clean up how primitive types are handled.

The PrimitiveType enum got "promoted" to libdex, and I added a
few helper functions there. I also quashed the idea that there
is some sort of canonical ordering of the enumerated values.

In the vm (per se), I made PrimitiveType uses where it had assumed
an ordering instead switch(). This mostly made things much simpler.

I also split out the array of type classes in Globals.h into
individual ClassObject*s. This mostly made things simpler, but the gc
got a tiny bit of extra cruft because of it.

Finally, I made it so that the type classes get created explicitly
during vm startup, instead of happening implicitly the first time
they're accessed. This both simplified the code and, in particular,
made it so that the type classes didn't have to be declared volatile.

There are still a couple of related items that could stand to be
cleaned up, but I think what's here is enough for one patch.

Change-Id: Id14a6dfdb200abce9f30911c330ba32d9c2a4c3f
3c6f4c012e0a314dc9f9f540b9374dbf530d03b0 23-Feb-2011 Jesse Wilson <jessewilson@google.com> Optimize Class.getMethod() by loading only one method.

Change-Id: Ia2cd776c0a14914264e8d94e978d55854ed75623
http://b/3431686
fc8044d08d4ee33f0f6938c5d97a376146af4225 07-Jan-2011 Andy McFadden <fadden@android.com> Fix JNI GetMethodID on interfaces

The GetMethodID call was only searching through methods declared by
classes and superclasses. If you passed it an interface class and
asked for a method declared in a superinterface, the call would fail.
We now have separate code for handling lookups on interfaces.

This also refactors some similar code in the interface method resolver.

Bug 3329492

(Cherry-pick from dalvik-dev)

Change-Id: Icaf744b9e75a1fd6d99f47281002cc6b3c36e368
da7334a4ba1bbffe40d3838f463565af46e716d9 07-Jan-2011 Andy McFadden <fadden@android.com> Fix JNI GetMethodID on interfaces

The GetMethodID call was only searching through methods declared by
classes and superclasses. If you passed it an interface class and
asked for a method declared in a superinterface, the call would fail.
We now have separate code for handling lookups on interfaces.

This also refactors some similar code in the interface method resolver.

Bug 3329492

Change-Id: I4db505231501ef089cd1c406b4654e897bd77d48
0d615c3ce5bf97ae65b9347ee77968f38620d5e8 18-Aug-2010 Andy McFadden <fadden@android.com> Always support debugging and profiling.

This eliminates the use of the WITH_DEBUGGER and WITH_PROFILER
conditional compilation flags. We've never shipped a device without
these features, and it's unlikely we ever will. They're not worth
the code clutter they cause.

As usual, since I can't test the x86-atom code I left that alone and
added an item to the TODO list.

Bug 2923442.

Change-Id: I335ebd5193bc86f7641513b1b41c0378839be1fe
7ef0755c91caeea2cc89d886e566e71dc626abed 25-Jun-2010 Barry Hayes <bhayes@google.com> Move WriteBarrier operations into their own header file. Split Object.h

The write barrier routines will soon be INLINE and non-null. Buried
in the middle of Object.h, which is early in Dalvik.h, it would be
hard for them to make use of definitions in other .h files.

Change-Id: I3c0eb59cb6ef29c2bacd0432cf59aaca4c3d031c
364f9d924cbd9d392744a66f80cc084c3d80caf0 12-Jun-2010 Barry Hayes <bhayes@google.com> Put wrappers on all stores of Object pointers into heap Objects.

Also:
Changed ++ loops to [i] loops where I'm touching.
Added some asserts.
Added dvmHeapSourceContainsAddress
Added dvmIsValidObjectAddress

Change-Id: I6586688246064aecabb1e22e1dca276fecee7795
c35a2ef53d0cccd6f924eeba36633220ec67c32e 17-Jun-2010 Andy McFadden <fadden@android.com> Add opcodes for volatile field accesses

This adds instructions for {i,s}{get,put}{,-object}-volatile, for a
total of eight new instructions.

On SMP systems, these instructions will be substituted in for existing
field access instructions, either by dexopt or during just-in-time
verification. Unlike the wide-volatile instructions, these will not be
used at all when the VM is not built for SMP.

(Ideally we'd omit the volatile instruction implementations entirely on
non-SMP builds, but that requires a little work in gen-mterp.py.)

The change defines and implements the opcodes and support methods, but
does not cause them to be used.

Also, changed dvmQuasiAtomicRead64's argument to be const.

Change-Id: I9e44fe881e87f27aa41f6c6e898ec4402cb5493e
6e10b9aaa72425a4825a25f0043533d0c6fdbba4 15-Jun-2010 Andy McFadden <fadden@android.com> Atomic op cleanup.

Replaced VM-local macros for barrier and CAS calls with the actual
versions provided by cutils.

ATOMIC_CMP_SWAP(addr,old,new) --> android_atomic_release_cas(old,new,addr)

MEM_BARRIER --> ANDROID_MEMBAR_FULL

Renamed android_quasiatomic* to dvmQuasiAtomic*.

Didn't change how anything works, just the names.

Change-Id: I8c68f28e1f7c9cb832183e0918d097dfe6a2cac8
de75089fb7216d19e9c22cce4dc62a49513477d3 09-Jun-2010 Carl Shapiro <cshapiro@google.com> Remove trailing whitespace.

Change-Id: I95534bb2b88eaf48f2329282041118cd034c812b
c49db8554956f8d43eb487709bc1dccfe0496ad2 14-May-2010 Barry Hayes <bhayes@google.com> Send unlinkedClass back to hell, as requested.

The GC and Verify routines now can look inside classes better as well.

Basic ideas:
1) Pre-allocate the java.lang.Class class, and explicitly
set its clazz field to itself.

2) Put ClassObjects in status CLASS_IDX when their super and interface
array contain Dex indexes rather than object pointers. The GC
understands this, and uses that status to decide on marking those
fields or not.

Change-Id: Id84310b8a4ee27bf1b33e5b58ad9739fad659c4e
fbdcfb9ea9e2a78f295834424c3f24986ea45dac 29-May-2010 Brian Carlstrom <bdc@google.com> Merge remote branch 'goog/dalvik-dev' into dalvik-dev-to-master

Change-Id: I0c0edb3ebf0d5e040d6bbbf60269fab0deb70ef9
861b33855aff080278ea5125e4372a2d4bf8aef5 06-Mar-2010 Andy McFadden <fadden@android.com> Make wide-volatile loads and stores atomic.

This implements the four wide-volatile instructions added in a previous
change, and modifies the verifier to substitute the opcodes into the
instruction stream when appropriate.

For mterp, the ARM wide get/put instructions now have conditional code
that replaces ldrd/strd with a call to the quasiatomic functions. The
C version does essentially the same thing. ARMv4T lacks ldrd/stdrd, and
uses separate implementations for the wide field accesses, so those were
updated as well. x86 will just use stubs.

The JIT should punt these to the interpreter.

Change-Id: Ife88559ed1a698c3267d43c454896f6b12081c0f
Also:
- We don't seem to be using the negative widths in the instruction
table. Not sure they're useful anymore.
- Tabs -> spaces in x86-atom throw-verification-error impl.
03aa70ae413c6c5fb2ee4424afd30608bfb465ee 02-Mar-2010 Barry Hayes <bhayes@google.com> Change Class layout to allocate an array of StaticField objects
immediately after the ClassObject, rather than use calloc.

This has the rather surprising and pleasing effect of increasing
charing about 150K per zygote-launced application, as measured at
start-up, after waiting and no-touching.

Change-Id: I6a6c9079f946eb99111326ed45f13ecfe544e4bb
8d7f9b2cd9fe252399ae96a36781bba1242fb93c 22-Dec-2009 Carl Shapiro <cshapiro@google.com> Supersede the Lock union type with a word-sized integer in the object
instance header. An object's lock member is now just a bit-field.
fcccb3bfa5f42fc728c307cfcf77db4d685583c0 30-Oct-2009 Barry Hayes <bhayes@google.com> Remove arrayClass from ClassObject. It seems to get only dozens of hits in
all of Zygote start-up.

There doesn't seem to be a measurable difference in the time printed in:
I/Zygote ( 2247): ...preloaded 1147 classes in NNNNms.
96516932f1557d8f48a8b2dbbb885af01a11ef6e 29-Oct-2009 Andy McFadden <fadden@android.com> Change the way breakpoints work.

This replaces the breakpoint mechanism with a more efficient approach.
We now insert breakpoint instructions into the bytecode stream instead of
maintaining a table. This requires mapping DEX files as private instead
of shared, which allows copy-on-write to work. mprotect() is used to
guard the pages against inadvertent writes.

Unused opcode EC is now OP_BREAKPOINT. It's not recognized by dexdump or
any interpreter except portdbg, but it can be encountered by the bytecode
verifier (the debugger can request breakpoints in unverified code).
Breakpoint changes are blocked while the verifier runs to avoid races.

This eliminates method->debugBreakpointCount, which is no longer needed.
(Also, it clashed with LinearAlloc's read-only mode.)

The deferred verification error mechanism was using a code-copying
approach to modify the bytecode stream. That has been changed to use
the same copy-on-write modification mechanism.

Also, normalized all PAGE_SIZE/PAGESIZE references to a single
SYSTEM_PAGE_SIZE define.

Simple Fibonacci computation test times (opal-eng):
JIT, no debugger: 10.6ms
Fast interp, no debugger: 36ms
Portable interp, no debugger: 43.8ms

ORIG debug interp, no breakpoints set: 458ms
ORIG debug interp, breakpoint set nearby: 697ms

NEW debug interp, no breakpoints set: 341ms
NEW debug interp, breakpoints set nearby: 341ms

Where "nearby" means there's a breakpoint in the method doing the
computation that isn't actually hit -- the VM had an optimization where
it flagged methods with breakpoints and skipped some of the processing
when possible.

The bottom line is that code should run noticeably faster while a
debugger is attached.
beea0b72181a13e6e0850704a2a5de2df00e15c3 13-Nov-2009 Elliott Hughes <enh@google.com> If we have a Class object in the "monitors held:" output, show which class.

Bug: 2187020
72e93344b4d1ffc71e9c832ec23de0657e5b04a5 13-Nov-2009 Jean-Baptiste Queru <jbq@google.com> eclair snapshot
6daaac12e5de630749f94ff5f15e902e7b18d8e7 08-Jul-2009 Barry Hayes <bhayes@google.com> Add a bit-map encoding of Object-reference field offsets to ClassObject.

Class.c populates a new field with a bit for each of the first 32 instance
fields, to show if it is a reference or not, and an escape value if there is a
reference field beyond 32.

The GC uses the encoded bitmap -- if available -- to extract Object refererences
from DataObjects.
1d9206d47ee3f7ae1f75de3d1cb02a8e9a72a0bb 15-Jul-2009 Andy McFadden <fadden@android.com> Make verifier field/method resolution conformant.

The VM spec spells out a particular way to look for fields. It assumes
that static and virtual fields are piled together into a single pool,
so it makes sense to scan through both kinds when resolving. In Dalvik,
field definitions are separated by scope, so we can save a little time
by only searching through the appropriate list.

It turns out that you can create a situation where a field with the same
name is available in both static and virtual forms in the same class.
javac won't let you do this in a single class, but with separate
compilation and inheritance you can pull it off. In these situations,
Dalvik can do the wrong thing. For example, if you ask for a static
field, Dalvik will happily use the static field from a superclass without
realizing that there's an instance field with the same name in the current
class. It's supposed to find the instance field, realize that it's not
static, and throw an exception.

This change updates the verifier to do an "untyped" scan like the VM
spec wants. Problematic situations are identifed and result in an
"incompatible class change" exception.

This does not alter "direct" method lookups (constructors, private
methods).

I also altered the annotation "ambiguous" method lookup to use the new
function, since that's probably the desired behavior there as well.
eac47eddd953ca572f1c92a326b55b735b46377d 22-Jun-2009 Barry Hayes <bhayes@google.com> Add a bit-map encoding of Object-reference field offsets to ClassObject.

Class.c populates a new field with a bit for each of the first 32 instance
fields, to show if it is a reference or not, and an escape value if there is a
reference field beyond 32.

The GC uses the encoded bitmap -- if available -- to extract Object refererences
from DataObjects.
b51ea11c70602918c42764bfafe92a997d3b1803 09-May-2009 Andy McFadden <fadden@android.com> Defer reporting of certain verifier failures.

The verifier currently reports all failures immediately. Certain failures,
such as the failure to resolve a method, or the determination that access
to a field is not allowed, are supposed to deferred until the first time
that executing code does something that could cause the resolution.

With this change, several kinds of verification failures are deferred.
This is done by making a writable copy of the bytecode and replacing the
failing instruction with an "always throw" opcode.

Gory details:
- Added throw-verification-error instruction. Implemented in "portable"
and ARM interpreters. x86 uses portable form through stub.
- Added a function that creates a copy of a DexCode area and makes the
bytecodes writable.
- Added code that replaces a single instruction with an "always throw".
- Replaced runtime check for abstract/interface in new-instance with a
check at verification time.
- Added a test to exercise the deferred error mechanism.
- Minor cleanups (replaced tab, bad valgrind command, ...).
2c98747b403970ef4b3352e271633f93935b9825 06-Apr-2009 Barry Hayes <bhayes@google.com> Improve zygote heap sharing.

[ This is bhayes change 9488 in external "master" ]

Lots of ClassObject structures are unshared [and thus make whole pages
unshared]. A big contributor to this is the initializing class loader
logic, which has two writable words in a ClassObject and does indeed
seem to write them a lot.

Class which are created "early" have a low serial number and are
probably being created by the zygote, and would benefit from better
sharing. This change move the two words for classes with a low serial
number to a global, making the two words in those ClassObjects unused,
and thus more likely to be shared across apps.

Measured increase in sharing is c 100K per app, at a cost of c 32K
increase in unshared globals.

This might be better as a Set<Pair<Class,ClassLoader>> or
something. Many ClassObjects have zero loaders, and the typical count
seems to be very small. It should be possible to remove the two words
from the ClassObject and at the same time have a smaller global data
structure.

Respond to reviewer's comments.
Moved the "external" InitiatingLoaderList[] from gDvm to allocated storage.
Made the warning for the "const" go away.
Remove "vm/Init.c" from the commit
Revert Globals.h to not contain ZYGOTE_CLASS_CUTOFF
Use calloc rather than malloc/clear
9b0e83401b0ade80e1943c2cc16ef5ec9b46eef5 06-Apr-2009 Barry Hayes <bhayes@google.com> Improve zygote heap sharing.

Lots of ClassObject structures are unshared [and thus make whole pages
unshared]. A big contributor to this is the initializing class loader
logic, which has two writable words in a ClassObject and does indeed
seem to write them a lot.

Class which are created "early" have a low serial number and are
probably being created by the zygote, and would benefit from better
sharing. This change move the two words for classes with a low serial
number to a global, making the two words in those ClassObjects unused,
and thus more likely to be shared across apps.

Measured increase in sharing is c 100K per app, at a cost of c 32K
increase in unshared globals.

This might be better as a Set<Pair<Class,ClassLoader>> or
something. Many ClassObjects have zero loaders, and the typical count
seems to be very small. It should be possible to remove the two words
from the ClassObject and at the same time have a smaller global data
structure.

Respond to reviewer's comments.
Moved the "external" InitiatingLoaderList[] from gDvm to allocated storage.
Made the warning for the "const" go away.
Remove "vm/Init.c" from the commit
Revert Globals.h to not contain ZYGOTE_CLASS_CUTOFF
Use calloc rather than malloc/clear
f6c387128427e121477c1b32ad35cdcaa5101ba3 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
f72d5de56a522ac3be03873bdde26f23a5eeeb3c 04-Mar-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //depot/cupcake/@135843
5d709784bbf5001012d7f25172927d46f6c1abe1 11-Feb-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@130745
bcd637a94f10b49d18b87a74a015f9d3453ed77a 22-Jan-2009 The Android Open Source Project <initial-contribution@android.com> auto import from //branches/cupcake/...@127436
89c1feb0a69a7707b271086e749975b3f7acacf7 18-Dec-2008 The Android Open Source Project <initial-contribution@android.com> Code drop from //branches/cupcake/...@124589
2ad60cfc28e14ee8f0bb038720836a4696c478ad 21-Oct-2008 The Android Open Source Project <initial-contribution@android.com> Initial Contribution