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
|