)]}'
{
  "log": [
    {
      "commit": "9150de6901996679c0ea6b34e74c8ddcc718d309",
      "tree": "496386b00b2a1b0b3bfbc36b09cf8083e3922f9b",
      "parents": [
        "8da26145fba859a5aba047f6280568565ffb8bfc"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Fri Feb 26 03:22:24 2021 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 02 07:18:14 2021 +0000"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to art\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  adbconnection/Android.bp\n  benchmark/Android.bp\n  build/Android.bp\n  build/Android.cpplint.mk\n  build/Android.gtest.mk\n  build/apex/Android.bp\n  build/boot/Android.bp\n  build/sdk/Android.bp\n  cmdline/Android.bp\n  compiler/Android.bp\n  dalvikvm/Android.bp\n  dex2oat/Android.bp\n  dexdump/Android.bp\n  dexlayout/Android.bp\n  dexlist/Android.bp\n  dexoptanalyzer/Android.bp\n  disassembler/Android.bp\n  dt_fd_forward/export/Android.bp\n  imgdiag/Android.bp\n  libartbase/Android.bp\n  libartpalette/Android.bp\n  libartservice/Android.bp\n  libartservice/tests/Android.bp\n  libarttools/Android.bp\n  libdexfile/Android.bp\n  libelffile/Android.bp\n  libnativebridge/Android.bp\n  libnativebridge/tests/Android.bp\n  libnativeloader/Android.bp\n  libnativeloader/test/Android.bp\n  libnativeloader/test/Android.mk\n  libprofile/Android.bp\n  oatdump/Android.bp\n  odrefresh/Android.bp\n  perfetto_hprof/Android.bp\n  profman/Android.bp\n  runtime/Android.bp\n  simulator/Android.bp\n  test/001-HelloWorld/Android.bp\n  test/001-Main/Android.bp\n  test/002-sleep/Android.bp\n  test/004-InterfaceTest/Android.bp\n  test/004-SignalTest/Android.bp\n  test/004-UnsafeTest/Android.bp\n  test/004-checker-UnsafeTest18/Android.bp\n  test/006-args/Android.bp\n  test/007-count10/Android.bp\n  test/009-instanceof/Android.bp\n  test/010-instance/Android.bp\n  test/011-array-copy/Android.bp\n  test/012-math/Android.bp\n  test/013-math2/Android.bp\n  test/014-math3/Android.bp\n  test/015-switch/Android.bp\n  test/016-intern/Android.bp\n  test/017-float/Android.bp\n  test/018-stack-overflow/Android.bp\n  test/019-wrong-array-type/Android.bp\n  test/020-string/Android.bp\n  test/021-string2/Android.bp\n  test/022-interface/Android.bp\n  test/025-access-controller/Android.bp\n  test/026-access/Android.bp\n  test/027-arithmetic/Android.bp\n  test/028-array-write/Android.bp\n  test/029-assert/Android.bp\n  test/030-bad-finalizer/Android.bp\n  test/033-class-init-deadlock/Android.bp\n  test/034-call-null/Android.bp\n  test/035-enum/Android.bp\n  test/036-finalizer/Android.bp\n  test/037-inherit/Android.bp\n  test/038-inner-null/Android.bp\n  test/039-join-main/Android.bp\n  test/040-miranda/Android.bp\n  test/041-narrowing/Android.bp\n  test/043-privates/Android.bp\n  test/044-proxy/Android.bp\n  test/045-reflect-array/Android.bp\n  test/046-reflect/Android.bp\n  test/047-returns/Android.bp\n  test/048-reflect-v8/Android.bp\n  test/049-show-object/Android.bp\n  test/050-sync-test/Android.bp\n  test/051-thread/Android.bp\n  test/052-verifier-fun/Android.bp\n  test/053-wait-some/Android.bp\n  test/054-uncaught/Android.bp\n  test/055-enum-performance/Android.bp\n  test/058-enum-order/Android.bp\n  test/059-finalizer-throw/Android.bp\n  test/061-out-of-memory/Android.bp\n  test/062-character-encodings/Android.bp\n  test/063-process-manager/Android.bp\n  test/067-preemptive-unpark/Android.bp\n  test/070-nio-buffer/Android.bp\n  test/072-precise-gc/Android.bp\n  test/072-reachability-fence/Android.bp\n  test/074-gc-thrash/Android.bp\n  test/076-boolean-put/Android.bp\n  test/078-polymorphic-virtual/Android.bp\n  test/079-phantom/Android.bp\n  test/080-oom-fragmentation/Android.bp\n  test/080-oom-throw-with-finalizer/Android.bp\n  test/080-oom-throw/Android.bp\n  test/081-hot-exceptions/Android.bp\n  test/082-inline-execute/Android.bp\n  test/083-compiler-regressions/Android.bp\n  test/084-class-init/Android.bp\n  test/086-null-super/Android.bp\n  test/087-gc-after-link/Android.bp\n  test/090-loop-formation/Android.bp\n  test/092-locale/Android.bp\n  test/093-serialization/Android.bp\n  test/094-pattern/Android.bp\n  test/095-switch-MAX_INT/Android.bp\n  test/096-array-copy-concurrent-gc/Android.bp\n  test/098-ddmc/Android.bp\n  test/099-vmdebug/Android.bp\n  test/100-reflect2/Android.bp\n  test/1004-checker-volatile-ref-load/Android.bp\n  test/101-fibonacci/Android.bp\n  test/102-concurrent-gc/Android.bp\n  test/103-string-append/Android.bp\n  test/104-growth-limit/Android.bp\n  test/105-invoke/Android.bp\n  test/106-exceptions2/Android.bp\n  test/107-int-math2/Android.bp\n  test/108-check-cast/Android.bp\n  test/109-suspend-check/Android.bp\n  test/110-field-access/Android.bp\n  test/112-double-math/Android.bp\n  test/114-ParallelGC/Android.bp\n  test/115-native-bridge/Android.bp\n  test/116-nodex2oat/Android.bp\n  test/120-hashcode/Android.bp\n  test/121-simple-suspend-check/Android.bp\n  test/122-npe/Android.bp\n  test/123-compiler-regressions-mt/Android.bp\n  test/123-inline-execute2/Android.bp\n  test/125-gc-and-classloading/Android.bp\n  test/128-reg-spill-on-implicit-nullcheck/Android.bp\n  test/129-ThreadGetId/Android.bp\n  test/132-daemon-locks-shutdown/Android.bp\n  test/133-static-invoke-super/Android.bp\n  test/1336-short-finalizer-timeout/Android.bp\n  test/1337-gc-coverage/Android.bp\n  test/1339-dead-reference-safe/Android.bp\n  test/136-daemon-jni-shutdown/Android.bp\n  test/139-register-natives/Android.bp\n  test/140-dce-regression/Android.bp\n  test/140-field-packing/Android.bp\n  test/143-string-value/Android.bp\n  test/144-static-field-sigquit/Android.bp\n  test/148-multithread-gc-annotations/Android.bp\n  test/149-suspend-all-stress/Android.bp\n  test/150-loadlibrary/Android.bp\n  test/151-OpenFileLimit/Android.bp\n  test/152-dead-large-object/Android.bp\n  test/153-reference-stress/Android.bp\n  test/154-gc-loop/Android.bp\n  test/156-register-dex-file-multi-loader/Android.bp\n  test/158-app-image-class-table/Android.bp\n  test/159-app-image-fields/Android.bp\n  test/163-app-image-methods/Android.bp\n  test/165-lock-owner-proxy/Android.bp\n  test/168-vmstack-annotated/Android.bp\n  test/169-threadgroup-jni/Android.bp\n  test/170-interface-init/Android.bp\n  test/172-app-image-twice/Android.bp\n  test/174-escaping-instance-of-bad-class/Android.bp\n  test/175-alloc-big-bignums/Android.bp\n  test/176-app-image-string/Android.bp\n  test/177-visibly-initialized-deadlock/Android.bp\n  test/178-app-image-native-method/Android.bp\n  test/179-nonvirtual-jni/Android.bp\n  test/1900-track-alloc/Android.bp\n  test/1901-get-bytecodes/Android.bp\n  test/1902-suspend/Android.bp\n  test/1903-suspend-self/Android.bp\n  test/1904-double-suspend/Android.bp\n  test/1905-suspend-native/Android.bp\n  test/1906-suspend-list-me-first/Android.bp\n  test/1907-suspend-list-self-twice/Android.bp\n  test/1908-suspend-native-resume-self/Android.bp\n  test/1909-per-agent-tls/Android.bp\n  test/1910-transform-with-default/Android.bp\n  test/1911-get-local-var-table/Android.bp\n  test/1912-get-set-local-primitive/Android.bp\n  test/1913-get-set-local-objects/Android.bp\n  test/1914-get-local-instance/Android.bp\n  test/1915-get-set-local-current-thread/Android.bp\n  test/1916-get-set-current-frame/Android.bp\n  test/1917-get-stack-frame/Android.bp\n  test/1919-vminit-thread-start-timing/Android.bp\n  test/1920-suspend-native-monitor/Android.bp\n  test/1921-suspend-native-recursive-monitor/Android.bp\n  test/1922-owned-monitors-info/Android.bp\n  test/1923-frame-pop/Android.bp\n  test/1924-frame-pop-toggle/Android.bp\n  test/1925-self-frame-pop/Android.bp\n  test/1926-missed-frame-pop/Android.bp\n  test/1927-exception-event/Android.bp\n  test/1928-exception-event-exception/Android.bp\n  test/1930-monitor-info/Android.bp\n  test/1931-monitor-events/Android.bp\n  test/1932-monitor-events-misc/Android.bp\n  test/1933-monitor-current-contended/Android.bp\n  test/1934-jvmti-signal-thread/Android.bp\n  test/1935-get-set-current-frame-jit/Android.bp\n  test/1936-thread-end-events/Android.bp\n  test/1937-transform-soft-fail/Android.bp\n  test/1938-transform-abstract-single-impl/Android.bp\n  test/1939-proxy-frames/Android.bp\n  test/1941-dispose-stress/Android.bp\n  test/1942-suspend-raw-monitor-exit/Android.bp\n  test/1943-suspend-raw-monitor-wait/Android.bp\n  test/1945-proxy-method-arguments/Android.bp\n  test/1947-breakpoint-redefine-deopt/Android.bp\n  test/1949-short-dex-file/Android.bp\n  test/1951-monitor-enter-no-suspend/Android.bp\n  test/1953-pop-frame/Android.bp\n  test/1954-pop-frame-jit/Android.bp\n  test/1955-pop-frame-jit-called/Android.bp\n  test/1956-pop-frame-jit-calling/Android.bp\n  test/1957-error-ext/Android.bp\n  test/1958-transform-try-jit/Android.bp\n  test/1959-redefine-object-instrument/Android.bp\n  test/1960-checker-bounds-codegen/Android.bp\n  test/1960-obsolete-jit-multithread-native/Android.bp\n  test/1961-checker-loop-vectorizer/Android.bp\n  test/1961-obsolete-jit-multithread/Android.bp\n  test/1962-multi-thread-events/Android.bp\n  test/1963-add-to-dex-classloader-in-memory/Android.bp\n  test/1967-get-set-local-bad-slot/Android.bp\n  test/1968-force-early-return/Android.bp\n  test/1969-force-early-return-void/Android.bp\n  test/1970-force-early-return-long/Android.bp\n  test/1971-multi-force-early-return/Android.bp\n  test/1972-jni-id-swap-indices/Android.bp\n  test/1973-jni-id-swap-pointer/Android.bp\n  test/1974-resize-array/Android.bp\n  test/1975-hello-structural-transformation/Android.bp\n  test/1976-hello-structural-static-methods/Android.bp\n  test/1977-hello-structural-obsolescence/Android.bp\n  test/1978-regular-obsolete-then-structural-obsolescence/Android.bp\n  test/1979-threaded-structural-transformation/Android.bp\n  test/1980-obsolete-object-cleared/Android.bp\n  test/1982-no-virtuals-structural-redefinition/Android.bp\n  test/1984-structural-redefine-field-trace/Android.bp\n  test/1985-structural-redefine-stack-scope/Android.bp\n  test/1986-structural-redefine-multi-thread-stack-scope/Android.bp\n  test/1987-structural-redefine-recursive-stack-scope/Android.bp\n  test/1988-multi-structural-redefine/Android.bp\n  test/1989-transform-bad-monitor/Android.bp\n  test/1990-structural-bad-verify/Android.bp\n  test/1991-hello-structural-retransform/Android.bp\n  test/1992-retransform-no-such-field/Android.bp\n  test/1993-fallback-non-structural/Android.bp\n  test/1994-final-virtual-structural/Android.bp\n  test/1995-final-virtual-structural-multithread/Android.bp\n  test/1996-final-override-virtual-structural/Android.bp\n  test/1997-structural-shadow-method/Android.bp\n  test/1998-structural-shadow-field/Android.bp\n  test/1999-virtual-structural/Android.bp\n  test/2003-double-virtual-structural/Android.bp\n  test/2004-double-virtual-structural-abstract/Android.bp\n  test/2005-pause-all-redefine-multithreaded/Android.bp\n  test/2008-redefine-then-old-reflect-field/Android.bp\n  test/201-built-in-except-detail-messages/Android.bp\n  test/2011-stack-walk-concurrent-instrument/Android.bp\n  test/2019-constantcalculationsinking/Android.bp\n  test/202-thread-oome/Android.bp\n  test/2020-InvokeVirtual-Inlining/Android.bp\n  test/2021-InvokeStatic-Inlining/Android.bp\n  test/2022-Invariantloops/Android.bp\n  test/2023-InvariantLoops_typecast/Android.bp\n  test/2024-InvariantNegativeLoop/Android.bp\n  test/2025-ChangedArrayValue/Android.bp\n  test/2026-DifferentMemoryLSCouples/Android.bp\n  test/2027-TwiceTheSameMemoryCouple/Android.bp\n  test/2028-MultiBackward/Android.bp\n  test/2029-contended-monitors/Android.bp\n  test/203-multi-checkpoint/Android.bp\n  test/2030-long-running-child/Android.bp\n  test/2031-zygote-compiled-frame-deopt/Android.bp\n  test/2033-shutdown-mechanics/Android.bp\n  test/2036-jni-filechannel/Android.bp\n  test/2037-thread-name-inherit/Android.bp\n  test/2231-checker-heap-poisoning/Android.bp\n  test/2232-write-metrics-to-log/Android.bp\n  test/300-package-override/Android.bp\n  test/301-abstract-protected/Android.bp\n  test/302-float-conversion/Android.bp\n  test/304-method-tracing/Android.bp\n  test/305-other-fault-handler/Android.bp\n  test/401-optimizing-compiler/Android.bp\n  test/402-optimizing-control-flow/Android.bp\n  test/403-optimizing-long/Android.bp\n  test/404-optimizing-allocator/Android.bp\n  test/405-optimizing-long-allocator/Android.bp\n  test/406-fields/Android.bp\n  test/407-arrays/Android.bp\n  test/408-move-bug/Android.bp\n  test/409-materialized-condition/Android.bp\n  test/410-floats/Android.bp\n  test/411-checker-hdiv-hrem-const/Android.bp\n  test/411-checker-hdiv-hrem-pow2/Android.bp\n  test/411-checker-instruct-simplifier-hrem/Android.bp\n  test/411-optimizing-arith/Android.bp\n  test/413-regalloc-regression/Android.bp\n  test/414-static-fields/Android.bp\n  test/418-const-string/Android.bp\n  test/419-long-parameter/Android.bp\n  test/420-const-class/Android.bp\n  test/421-exceptions/Android.bp\n  test/421-large-frame/Android.bp\n  test/422-instanceof/Android.bp\n  test/422-type-conversion/Android.bp\n  test/423-invoke-interface/Android.bp\n  test/424-checkcast/Android.bp\n  test/426-monitor/Android.bp\n  test/427-bitwise/Android.bp\n  test/427-bounds/Android.bp\n  test/429-ssa-builder/Android.bp\n  test/430-live-register-slow-path/Android.bp\n  test/433-gvn/Android.bp\n  test/434-shifter-operand/Android.bp\n  test/435-try-finally-without-catch/Android.bp\n  test/436-rem-float/Android.bp\n  test/436-shift-constant/Android.bp\n  test/437-inline/Android.bp\n  test/438-volatile/Android.bp\n  test/439-npe/Android.bp\n  test/439-swap-double/Android.bp\n  test/440-stmp/Android.bp\n  test/441-checker-inliner/Android.bp\n  test/443-not-bool-inline/Android.bp\n  test/444-checker-nce/Android.bp\n  test/445-checker-licm/Android.bp\n  test/446-checker-inliner2/Android.bp\n  test/447-checker-inliner3/Android.bp\n  test/449-checker-bce-rem/Android.bp\n  test/449-checker-bce/Android.bp\n  test/450-checker-types/Android.bp\n  test/451-regression-add-float/Android.bp\n  test/451-spill-splot/Android.bp\n  test/454-get-vreg/Android.bp\n  test/455-checker-gvn/Android.bp\n  test/456-baseline-array-set/Android.bp\n  test/458-long-to-fpu/Android.bp\n  test/461-get-reference-vreg/Android.bp\n  test/464-checker-inline-sharpen-calls/Android.bp\n  test/465-checker-clinit-gvn/Android.bp\n  test/466-get-live-vreg/Android.bp\n  test/469-condition-materialization/Android.bp\n  test/470-huge-method/Android.bp\n  test/471-deopt-environment/Android.bp\n  test/472-type-propagation/Android.bp\n  test/473-checker-inliner-constants/Android.bp\n  test/473-remove-dead-block/Android.bp\n  test/474-checker-boolean-input/Android.bp\n  test/474-fp-sub-neg/Android.bp\n  test/475-simplify-mul-zero/Android.bp\n  test/476-checker-ctor-fence-redun-elim/Android.bp\n  test/476-checker-ctor-memory-barrier/Android.bp\n  test/476-clinit-inline-static-invoke/Android.bp\n  test/477-checker-bound-type/Android.bp\n  test/477-long-2-float-convers-precision/Android.bp\n  test/478-checker-clinit-check-pruning/Android.bp\n  test/478-checker-inline-noreturn/Android.bp\n  test/478-checker-inliner-nested-loop/Android.bp\n  test/479-regression-implicit-null-check/Android.bp\n  test/480-checker-dead-blocks/Android.bp\n  test/481-regression-phi-cond/Android.bp\n  test/482-checker-loop-back-edge-use/Android.bp\n  test/483-dce-block/Android.bp\n  test/485-checker-dce-switch/Android.bp\n  test/486-checker-must-do-null-check/Android.bp\n  test/487-checker-inline-calls/Android.bp\n  test/488-checker-inline-recursive-calls/Android.bp\n  test/489-current-method-regression/Android.bp\n  test/490-checker-inline/Android.bp\n  test/491-current-method/Android.bp\n  test/492-checker-inline-invoke-interface/Android.bp\n  test/493-checker-inline-invoke-interface/Android.bp\n  test/494-checker-instanceof-tests/Android.bp\n  test/495-checker-checkcast-tests/Android.bp\n  test/496-checker-inlining-class-loader/Android.bp\n  test/497-inlining-and-class-loader/Android.bp\n  test/499-bce-phi-array-length/Android.bp\n  test/500-instanceof/Android.bp\n  test/505-simplifier-type-propagation/Android.bp\n  test/507-boolean-test/Android.bp\n  test/507-referrer/Android.bp\n  test/508-checker-disassembly/Android.bp\n  test/508-referrer-method/Android.bp\n  test/513-array-deopt/Android.bp\n  test/514-shifts/Android.bp\n  test/519-bound-load-class/Android.bp\n  test/521-checker-array-set-null/Android.bp\n  test/521-regression-integer-field-set/Android.bp\n  test/524-boolean-simplifier-regression/Android.bp\n  test/525-checker-arrays-fields1/Android.bp\n  test/525-checker-arrays-fields2/Android.bp\n  test/526-checker-caller-callee-regs/Android.bp\n  test/526-long-regalloc/Android.bp\n  test/527-checker-array-access-simd/Android.bp\n  test/527-checker-array-access-split/Android.bp\n  test/528-long-hint/Android.bp\n  test/529-long-split/Android.bp\n  test/530-checker-loops1/Android.bp\n  test/530-checker-loops2/Android.bp\n  test/530-checker-loops3/Android.bp\n  test/530-checker-loops4/Android.bp\n  test/530-checker-loops5/Android.bp\n  test/530-checker-lse-ctor-fences/Android.bp\n  test/530-checker-lse-simd/Android.bp\n  test/530-checker-lse/Android.bp\n  test/530-checker-lse2/Android.bp\n  test/530-instanceof-checkcast/Android.bp\n  test/530-regression-lse/Android.bp\n  test/532-checker-nonnull-arrayset/Android.bp\n  test/534-checker-bce-deoptimization/Android.bp\n  test/535-deopt-and-inlining/Android.bp\n  test/536-checker-intrinsic-optimization/Android.bp\n  test/537-checker-arraycopy/Android.bp\n  test/537-checker-jump-over-jump/Android.bp\n  test/538-checker-embed-constants/Android.bp\n  test/540-checker-rtp-bug/Android.bp\n  test/542-bitfield-rotates/Android.bp\n  test/542-inline-trycatch/Android.bp\n  test/542-unresolved-access-check/Android.bp\n  test/545-tracing-and-jit/Android.bp\n  test/548-checker-inlining-and-dce/Android.bp\n  test/549-checker-types-merge/Android.bp\n  test/550-checker-multiply-accumulate/Android.bp\n  test/550-new-instance-clinit/Android.bp\n  test/551-checker-clinit/Android.bp\n  test/551-checker-shifter-operand/Android.bp\n  test/551-implicit-null-checks/Android.bp\n  test/552-checker-sharpening/Android.bp\n  test/552-checker-x86-avx2-bit-manipulation/Android.bp\n  test/554-checker-rtp-checkcast/Android.bp\n  test/555-UnsafeGetLong-regression/Android.bp\n  test/557-checker-instruct-simplifier-ror/Android.bp\n  test/558-switch/Android.bp\n  test/559-bce-ssa/Android.bp\n  test/559-checker-rtp-ifnotnull/Android.bp\n  test/560-packed-switch/Android.bp\n  test/561-divrem/Android.bp\n  test/561-shared-slowpaths/Android.bp\n  test/562-bce-preheader/Android.bp\n  test/562-checker-no-intermediate/Android.bp\n  test/563-checker-invoke-super/Android.bp\n  test/564-checker-bitcount/Android.bp\n  test/564-checker-inline-loop/Android.bp\n  test/564-checker-negbitwise/Android.bp\n  test/565-checker-condition-liveness/Android.bp\n  test/566-checker-codegen-select/Android.bp\n  test/566-polymorphic-inlining/Android.bp\n  test/567-checker-builder-intrinsics/Android.bp\n  test/568-checker-onebit/Android.bp\n  test/570-checker-select/Android.bp\n  test/572-checker-array-get-regression/Android.bp\n  test/573-checker-checkcast-regression/Android.bp\n  test/576-polymorphic-inlining/Android.bp\n  test/577-checker-fp2int/Android.bp\n  test/578-bce-visit/Android.bp\n  test/578-polymorphic-inlining/Android.bp\n  test/579-inline-infinite/Android.bp\n  test/580-checker-round/Android.bp\n  test/580-crc32/Android.bp\n  test/581-rtp/Android.bp\n  test/582-checker-bce-length/Android.bp\n  test/583-checker-zero/Android.bp\n  test/584-checker-div-bool/Android.bp\n  test/589-super-imt/Android.bp\n  test/590-checker-arr-set-null-regression/Android.bp\n  test/591-checker-regression-dead-loop/Android.bp\n  test/593-checker-long-2-float-regression/Android.bp\n  test/594-checker-array-alias/Android.bp\n  test/594-load-string-regression/Android.bp\n  test/595-profile-saving/Android.bp\n  test/597-deopt-busy-loop/Android.bp\n  test/597-deopt-invoke-stub/Android.bp\n  test/597-deopt-new-string/Android.bp\n  test/602-deoptimizeable/Android.bp\n  test/603-checker-instanceof/Android.bp\n  test/604-hot-static-interface/Android.bp\n  test/605-new-string-from-bytes/Android.bp\n  test/607-daemon-stress/Android.bp\n  test/609-checker-inline-interface/Android.bp\n  test/609-checker-x86-bounds-check/Android.bp\n  test/610-arraycopy/Android.bp\n  test/611-checker-simplify-if/Android.bp\n  test/614-checker-dump-constant-location/Android.bp\n  test/615-checker-arm64-store-zero/Android.bp\n  test/616-cha-abstract/Android.bp\n  test/616-cha-interface/Android.bp\n  test/616-cha-miranda/Android.bp\n  test/616-cha-native/Android.bp\n  test/616-cha-regression-proxy-method/Android.bp\n  test/616-cha/Android.bp\n  test/617-clinit-oome/Android.bp\n  test/618-checker-induction/Android.bp\n  test/619-checker-current-method/Android.bp\n  test/620-checker-bce-intrinsics/Android.bp\n  test/622-checker-bce-regressions/Android.bp\n  test/623-checker-loop-regressions/Android.bp\n  test/625-checker-licm-regressions/Android.bp\n  test/626-set-resolved-string/Android.bp\n  test/627-checker-unroll/Android.bp\n  test/628-vdex/Android.bp\n  test/629-vdex-speed/Android.bp\n  test/631-checker-get-class/Android.bp\n  test/632-checker-char-at-bounds/Android.bp\n  test/635-checker-arm64-volatile-load-cc/Android.bp\n  test/636-arm64-veneer-pool/Android.bp\n  test/637-checker-throw-inline/Android.bp\n  test/638-checker-inline-cache-intrinsic/Android.bp\n  test/639-checker-code-sinking/Android.bp\n  test/640-checker-boolean-simd/Android.bp\n  test/640-checker-integer-valueof/Android.bp\n  test/640-checker-simd/Android.bp\n  test/641-checker-arraycopy/Android.bp\n  test/641-iterations/Android.bp\n  test/642-fp-callees/Android.bp\n  test/643-checker-bogus-ic/Android.bp\n  test/645-checker-abs-simd/Android.bp\n  test/646-checker-arraycopy-large-cst-pos/Android.bp\n  test/646-checker-long-const-to-int/Android.bp\n  test/646-checker-simd-hadd/Android.bp\n  test/647-jni-get-field-id/Android.bp\n  test/650-checker-inline-access-thunks/Android.bp\n  test/652-deopt-intrinsic/Android.bp\n  test/654-checker-periodic/Android.bp\n  test/655-checker-simd-arm-opt/Android.bp\n  test/655-jit-clinit/Android.bp\n  test/656-checker-simd-opt/Android.bp\n  test/656-loop-deopt/Android.bp\n  test/657-branches/Android.bp\n  test/658-fp-read-barrier/Android.bp\n  test/660-checker-sad/Android.bp\n  test/660-checker-simd-sad/Android.bp\n  test/660-clinit/Android.bp\n  test/661-checker-simd-reduc/Android.bp\n  test/661-oat-writer-layout/Android.bp\n  test/662-regression-alias/Android.bp\n  test/664-aget-verifier/Android.bp\n  test/665-checker-simd-zero/Android.bp\n  test/666-dex-cache-itf/Android.bp\n  test/667-checker-simd-alignment/Android.bp\n  test/667-jit-jni-stub/Android.bp\n  test/667-out-of-bounds/Android.bp\n  test/669-checker-break/Android.bp\n  test/671-npe-field-opts/Android.bp\n  test/672-checker-throw-method/Android.bp\n  test/673-checker-throw-vmethod/Android.bp\n  test/674-HelloWorld-Dm/Android.bp\n  test/674-hotness-compiled/Android.bp\n  test/676-proxy-jit-at-first-use/Android.bp\n  test/677-fsi2/Android.bp\n  test/679-locks/Android.bp\n  test/680-checker-deopt-dex-pc-0/Android.bp\n  test/680-sink-regression/Android.bp\n  test/684-checker-simd-dotprod/Android.bp\n  test/684-select-condition/Android.bp\n  test/685-deoptimizeable/Android.bp\n  test/687-deopt/Android.bp\n  test/689-multi-catch/Android.bp\n  test/689-zygote-jit-deopt/Android.bp\n  test/693-vdex-inmem-loader-evict/Android.bp\n  test/694-clinit-jit/Android.bp\n  test/695-simplify-throws/Android.bp\n  test/696-loop/Android.bp\n  test/697-checker-string-append/Android.bp\n  test/698-selects/Android.bp\n  test/700-LoadArgRegs/Android.bp\n  test/703-floating-point-div/Android.bp\n  test/704-multiply-accumulate/Android.bp\n  test/705-register-conflict/Android.bp\n  test/707-checker-invalid-profile/Android.bp\n  test/708-jit-cache-churn/Android.bp\n  test/711-checker-type-conversion/Android.bp\n  test/717-integer-value-of/Android.bp\n  test/718-zipfile-finalizer/Android.bp\n  test/720-thread-priority/Android.bp\n  test/721-osr/Android.bp\n  test/726-array-store/Android.bp\n  test/728-imt-conflict-zygote/Android.bp\n  test/805-TooDeepClassInstanceOf/Android.bp\n  test/806-TooWideClassInstanceOf/Android.bp\n  test/812-recursive-default/Android.bp\n  test/813-fp-args/Android.bp\n  test/814-large-field-offsets/Android.bp\n  test/815-invokeinterface-default/Android.bp\n  test/818-clinit-nterp/Android.bp\n  test/900-hello-plugin/Android.bp\n  test/901-hello-ti-agent/Android.bp\n  test/902-hello-transformation/Android.bp\n  test/903-hello-tagging/Android.bp\n  test/904-object-allocation/Android.bp\n  test/905-object-free/Android.bp\n  test/906-iterate-heap/Android.bp\n  test/907-get-loaded-classes/Android.bp\n  test/908-gc-start-finish/Android.bp\n  test/910-methods/Android.bp\n  test/911-get-stack-trace/Android.bp\n  test/913-heaps/Android.bp\n  test/914-hello-obsolescence/Android.bp\n  test/915-obsolete-2/Android.bp\n  test/916-obsolete-jit/Android.bp\n  test/917-fields-transformation/Android.bp\n  test/918-fields/Android.bp\n  test/919-obsolete-fields/Android.bp\n  test/920-objects/Android.bp\n  test/921-hello-failure/Android.bp\n  test/922-properties/Android.bp\n  test/923-monitors/Android.bp\n  test/924-threads/Android.bp\n  test/925-threadgroups/Android.bp\n  test/926-multi-obsolescence/Android.bp\n  test/927-timers/Android.bp\n  test/928-jni-table/Android.bp\n  test/930-hello-retransform/Android.bp\n  test/931-agent-thread/Android.bp\n  test/932-transform-saves/Android.bp\n  test/933-misc-events/Android.bp\n  test/937-hello-retransform-package/Android.bp\n  test/939-hello-transformation-bcp/Android.bp\n  test/940-recursive-obsolete/Android.bp\n  test/941-recursive-obsolete-jit/Android.bp\n  test/942-private-recursive/Android.bp\n  test/943-private-recursive-jit/Android.bp\n  test/944-transform-classloaders/Android.bp\n  test/945-obsolete-native/Android.bp\n  test/946-obsolete-throw/Android.bp\n  test/947-reflect-method/Android.bp\n  test/949-in-memory-transform/Android.bp\n  test/950-redefine-intrinsic/Android.bp\n  test/951-threaded-obsolete/Android.bp\n  test/963-default-range-smali/Android.bp\n  test/982-ok-no-retransform/Android.bp\n  test/983-source-transform-verify/Android.bp\n  test/984-obsolete-invoke/Android.bp\n  test/985-re-obsolete/Android.bp\n  test/986-native-method-bind/Android.bp\n  test/987-agent-bind/Android.bp\n  test/988-method-trace/Android.bp\n  test/989-method-trace-throw/Android.bp\n  test/990-field-trace/Android.bp\n  test/991-field-trace-2/Android.bp\n  test/992-source-data/Android.bp\n  test/993-breakpoints/Android.bp\n  test/994-breakpoint-line/Android.bp\n  test/995-breakpoints-throw/Android.bp\n  test/996-breakpoint-obsolete/Android.bp\n  test/997-single-step/Android.bp\n  test/Android.bp\n  tools/Android.bp\n  tools/ahat/Android.bp\n  tools/ahat/Android.mk\n  tools/art_verifier/Android.bp\n  tools/cpp-define-generator/Android.bp\n  tools/dexanalyze/Android.bp\n  tools/dexfuzz/Android.bp\n  tools/dmtracedump/Android.bp\n  tools/hiddenapi/Android.bp\n  tools/jfuzz/Android.bp\n  tools/jvmti-agents/breakpoint-logger/Android.bp\n  tools/jvmti-agents/chain-agents/Android.bp\n  tools/jvmti-agents/dump-jvmti-state/Android.bp\n  tools/jvmti-agents/enable-vlog/Android.bp\n  tools/jvmti-agents/field-counts/Android.bp\n  tools/jvmti-agents/field-null-percent/Android.bp\n  tools/jvmti-agents/jit-load/Android.bp\n  tools/jvmti-agents/list-extensions/Android.bp\n  tools/jvmti-agents/simple-force-redefine/Android.bp\n  tools/jvmti-agents/simple-profile/Android.bp\n  tools/jvmti-agents/ti-alloc-sample/Android.bp\n  tools/jvmti-agents/ti-fast/Android.bp\n  tools/jvmti-agents/titrace/Android.bp\n  tools/jvmti-agents/wrapagentproperties/Android.bp\n  tools/signal_dumper/Android.bp\n  tools/tracefast-plugin/Android.bp\n  tools/veridex/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  sigchainlib/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD\n    SPDX-license-identifier-GPL-2.0\nto:\n  Android.bp\n  Android.mk\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-GPL-2.0\n    SPDX-license-identifier-GPL-with-classpath-exception\nto:\n  dt_fd_forward/Android.bp\n  openjdkjvmti/Android.bp\n\nAdded SPDX-license-identifier-GPL-2.0\n    SPDX-license-identifier-GPL-with-classpath-exception\nto:\n  openjdkjvm/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\nChange-Id: If775045c12955fa6d72d40ccf2a09beef93d1699\nMerged-in: If775045c12955fa6d72d40ccf2a09beef93d1699\n"
    },
    {
      "commit": "3e9abfc9779399815a7dc8d492466a1234b7fdcd",
      "tree": "fd1017f153d3759488914c4d372f543125722ad1",
      "parents": [
        "35b132e3377029a356cfbc9e4682e3ebceb83edf"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Oct 09 22:17:51 2020 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Oct 23 10:03:13 2020 +0000"
      },
      "message": "Rename ART release APEX to com.android.art.\n\nTest: Build \u0026 boot on AOSP master\nTest: `m` on AOSP master, flipping\n  PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD between true and false, and\n  check out/target/product/bonito/symbols/apex/com.android.art.\nTest: art/build/apex/runtests.sh\nTest: art/tools/buildbot-build.sh {--host,--target}\nTest: art/tools/run-gtests.sh\nTest: m test-art-host-gtest\nTest: art/test/testrunner/testrunner.py --target --64 --optimizing\nTest: m build-art-target-golem\nBug: 169639321\nChange-Id: Ic4bb8d6f9988ce99bba326b9c635bd3c01ed74ab\nMerged-In: Ic4bb8d6f9988ce99bba326b9c635bd3c01ed74ab\n"
    },
    {
      "commit": "169dfb47436b94def39390be5e2d2ca93e16d61d",
      "tree": "f9c2bea35779bc7abb16e92ce636d1b0670adc8f",
      "parents": [
        "e492f7ed1499a6b600181bb13584091b8f0f63dd"
      ],
      "author": {
        "name": "Yo Chiang",
        "email": "yochiang@google.com",
        "time": "Fri Aug 07 04:22:18 2020 +0000"
      },
      "committer": {
        "name": "Yo Chiang",
        "email": "yochiang@google.com",
        "time": "Tue Aug 11 04:56:51 2020 +0000"
      },
      "message": "Revert^2 \"art: Remove dependencies on platform unavailable modules\"\n\nRevert^2 \"releasetools: Disable host module on darwin\"\n\n0ac3666667de42bd681586d642b52fc9e62e488f\n\nChange-Id: I0c2edeea8a10acc4a6e74a0660ebf7aa5dd67d1b\n"
    },
    {
      "commit": "c4cd59b1f17865d9ba1f362cb5c187cb95982355",
      "tree": "d0b8273b33ff23fab222a167f33bf4f35e6e31d3",
      "parents": [
        "0fa304ee0fa63149222bfc6756f56cd285c56bd1"
      ],
      "author": {
        "name": "Insaf Latypov",
        "email": "saferif@google.com",
        "time": "Thu Aug 06 15:36:57 2020 +0000"
      },
      "committer": {
        "name": "Insaf Latypov",
        "email": "saferif@google.com",
        "time": "Thu Aug 06 15:44:20 2020 +0000"
      },
      "message": "Revert \"art: Remove dependencies on platform unavailable modules\"\n\nRevert \"releasetools: Disable host module on darwin\"\n\nRevert \"conscrypt: Disable host module on darwin\"\n\nRevert submission 1385032-mac-required-fix\n\nReason for revert: breaks the build on aosp-master\nReverted Changes:\nI13335299c:releasetools: Disable host module on darwin\nI728a4677a:conscrypt: Disable host module on darwin\nI8f3435ff1:art: Remove dependencies on platform unavailable m...\nIbb9248ef4:art: Disable host module on darwin\nI7db68a629:libcore: Disable host module on darwin\n\nBug: 163030797\nChange-Id: Ibe83fc65bca64602e8b37b58b2ad6e20476efa63\n"
    },
    {
      "commit": "84eb3c927c5a90aaa63b8e82420689b4ac978730",
      "tree": "24e2ee65dcbc96c9000646e94b1a6e7250e693dc",
      "parents": [
        "47f9c9fdd01835e69b1cae705254c8e5c2b01afc"
      ],
      "author": {
        "name": "Yo Chiang",
        "email": "yochiang@google.com",
        "time": "Fri Jul 31 20:55:17 2020 +0800"
      },
      "committer": {
        "name": "Yo Chiang",
        "email": "yochiang@google.com",
        "time": "Thu Aug 06 04:02:47 2020 +0000"
      },
      "message": "art: Remove dependencies on platform unavailable modules\n\nThe device variants of these tests depend on tools such as\n`dex2oatd` which are not available to the platform. The tools\nare provided by the ART APEX (com.android.art.debug / .testing).\n\nThis also breaks darwin host build coincidentally, because on\nlinux host build the build system confuses the host and device\nvariants of `dex2oatd`, so the build system mistakenly thought\ndevice variant of \"dex2oatd\" exists (while in reality only the\nhost variant exists.)\nOn darwin host however, both device and host variants of\n`dex2oatd` doesn\u0027t exist, thus triggering a build break.\n\nSo for the host variants of these tests, the tools\ndependencies should be specified as\n`host.required: [\u003ctool name\u003e]` and for the device variants\n`android.required: [\"com.android.art.testing\"]`.\nHowever these device testcases are already packaged in the\nART testing APEX, so the device dependency should be omitted.\n\nBug: 162102724\nBug: 7456955\nTest: TH build mac host target\nChange-Id: I8f3435ff11f19f7191e87b0728e6d524bbd0f559\n"
    },
    {
      "commit": "4a88a5af7417d9dc0bfe37cffd92a253531c8f30",
      "tree": "6a0496ac10c62f8d183265a9d9615d5778a8c444",
      "parents": [
        "ffffa9c4e18e233db7b0f5eb31d07d8a52d527e4"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue May 05 16:21:57 2020 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 29 11:51:26 2020 +0000"
      },
      "message": "Finish move of jar compilation rules from makefile to soong.\n\nThe rules have already been previously ported to soong, but they were\nonly used for atest.  Always use them to simplify the makefile.\n\nThis makes the gtest modules in .bp files depend on the needed jars,\nwhich ensures that they will be copied next to the test binary.\nThis is needed as atest can not access them in the current location.\n\nIt also simplifies the tradefed xml since the manual copying\ncan be removed for the apex-based device testing.\n\nTest: test-art-host-gtest\nTest: atest ArtGtestsTarget\nBug: 147819342\nChange-Id: I54d92eca88fc04c949209d490e838d0a92ce8f87\n"
    },
    {
      "commit": "e2cc08b179e665afced11ae8deb3508f0d3814ca",
      "tree": "f8011a891b1ac037ffbf76caf1046c2ef2cdb2b3",
      "parents": [
        "80c0c50de048da458c707adde5b0499d75f8253a"
      ],
      "author": {
        "name": "leon.wang",
        "email": "leon.wang@unisoc.com",
        "time": "Thu Mar 26 14:27:59 2020 +0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 26 20:40:07 2020 +0000"
      },
      "message": "Fix a typo in dexanalyze usage info\n\ncount_indices -\u003e count-indices\n\nChange-Id: I1bd790a0df9c0434de130c4b2ff091f0cc670cca\n"
    },
    {
      "commit": "066dd902930582873e7d9372ac0c8483ac700cb9",
      "tree": "f3a0b47419fea78001faea017ba04e630e82fd2e",
      "parents": [
        "fb537087516e34e92e3c030ef2f7fc8b233d7a47"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu Dec 19 02:11:59 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 20 01:17:37 2019 +0000"
      },
      "message": "Revert submission 1194828-revert-1191937-art_apex_available-DWXQGTKMAR\n\nReason for revert: relanding with fix\nReverted Changes:\nIc4119368c:Revert submission 1191937-art_apex_available\nIa084976bb:Revert submission 1191937-art_apex_available\nIada86226d:Revert submission 1191937-art_apex_available\nIc76735eac:Revert submission 1191937-art_apex_available\nI1eb30e355:Revert submission 1191937-art_apex_available\nIcaf95d260:Revert submission 1191937-art_apex_available\nIe8bace4be:Revert submission 1191937-art_apex_available\nI8961702cf:Revert submission 1191937-art_apex_available\nI39316f9ef:Revert submission 1191937-art_apex_available\nI522a7e83b:Revert submission 1191937-art_apex_available\nI8b9424976:Revert submission 1191937-art_apex_available\nI48b998629:Revert submission 1191937-art_apex_available\n\nChange-Id: I7a101d39ff63c153675e4e741f9de1a15a778d33\n"
    },
    {
      "commit": "80599a28d1c865de7644a87111f49ee3b30f7c41",
      "tree": "e56dcf999630a752cd955a06c7f4c00b7add290b",
      "parents": [
        "1e88f980a85056165312331746862dc48186bc54"
      ],
      "author": {
        "name": "Joseph Murphy",
        "email": "murj@google.com",
        "time": "Thu Dec 19 01:06:54 2019 +0000"
      },
      "committer": {
        "name": "Joseph Murphy",
        "email": "murj@google.com",
        "time": "Thu Dec 19 01:06:54 2019 +0000"
      },
      "message": "Revert submission 1191937-art_apex_available\n\nOriginal Commit Message:\n\"\"\"\nRename modules that are APEX-only\n\nThe renamed modules are only available for APEXes, but not for the\nplatform. Use the \u003cmodule_name\u003e.\u003capex_name\u003e syntax to correctly install\nthe APEX variant of the modules.\n\"\"\"\n\nReason for revert: Build Cop - Breaks about 15 AOSP targets, with high confidence due to these changes being the only non-robot changes in those builds.\n\nReverted Changes:\nI190ce2d10:Use apex_available property\nI990e0a67e:Use apex_available property\nI0d1295683:Revert \"Avoid duplicated classes for boot dex jars...\nI5fb725403:Find the jar libraries in APEX from the correct pa...\nI322b1efcc:Rename modules that are APEX-only\nIfa2bd0f8f:Use apex_available property\nIac6533177:Use apex_available property\nIe999602c6:Use apex_available property\nI2a3d73397:Use apex_available property\nIc91bcbb9a:Use apex_available property\nIa6c324eed:Use apex_available property\nI964d0125c:Use apex_available property\n\nChange-Id: I1eb30e355cfce316b94cde0dd176002af8d222bb\n"
    },
    {
      "commit": "1e88f980a85056165312331746862dc48186bc54",
      "tree": "0cbeeaf951d6bd637a46f4f51faf80587f3ecc2b",
      "parents": [
        "c9af14e93f6a2691bf8231752d8d7c3e41b14c76"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Dec 02 13:44:06 2019 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Thu Dec 19 00:21:38 2019 +0000"
      },
      "message": "Use apex_available property\n\nUse apex_available property to prevent modules that are only for the ART\napex from being used outside of the APEX.\n\nThis change also fixes the reference to\n$(TARGET_OUT_SHARED_LIBRARIES)/$(lib).so to $(lib).com.android.art.debug\nphony module since the former is never installed to the system partition\ndue to their \u0027apex_available\u0027 settings.\n\nBug: 128708192\nBug: 133140750\nTest: m\nChange-Id: I990e0a67e066d9b1dc221748422a2f44449258da\n"
    },
    {
      "commit": "e58624f221b967553d7b71f14d8677ceaa000553",
      "tree": "00d6caa5ca66562d9c8e448abc77c0c6018fca0c",
      "parents": [
        "48349ad38887f65da76df268f8e548d508d8c6a1"
      ],
      "author": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Fri Sep 20 15:53:40 2019 +0100"
      },
      "committer": {
        "name": "Martin Stjernholm",
        "email": "mast@google.com",
        "time": "Tue Sep 24 17:40:00 2019 +0000"
      },
      "message": "Various renames following the name change from \"Runtime APEX\" to \"ART APEX\".\n\nIn particular ANDROID_RUNTIME_ROOT is now ANDROID_ART_ROOT.\n\nTest: Build \u0026 boot\nTest: art/tools/run-gtests.sh in chroot\nTest: art/test/testrunner/testrunner.py --target --64 in chroot\nTest: art/tools/run-libcore-tests.sh --mode\u003ddevice --variant\u003dX64 in chroot\nTest: art/tools/run-jdwp-tests.sh --mode\u003ddevice --variant\u003dX64 in chroot\nTest: m test-art-host-gtest\nTest: art/test/testrunner/testrunner.py --host --64\nTest: art/tools/run-jdwp-tests.sh --mode\u003dhost\nBug: 135753770\nChange-Id: Ia74da964e54cf396d66e9e12ea56da4e9483662a\n"
    },
    {
      "commit": "fb6a5c00ef02cda7ea919d717daaf46abd0414e4",
      "tree": "9ecfaac9bee174b3b31e0294c46c4d32a5f7b714",
      "parents": [
        "f160394fda141184f0ec3d139ec5ca810f142bda"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Mar 29 20:20:16 2019 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Apr 12 13:47:09 2019 +0100"
      },
      "message": "Add and use art::GetAndroidRuntimeBinDir.\n\nThis method returns the location of the directory containing the\nAndroid Runtime binaries, which is expected to be the Android Runtime\nAPEX\u0027s bin directory on target and the Android Root\u0027s bin directory on\nhost (at least for now).\n\nAlso remove art::CommonArtTestImpl::GetTestAndroidRoot as it is no\nlonger used.\n\nTest: ART gtests on host and target\nBug: 121117762\nChange-Id: I4593bbd4d675ca9d3f7b708482aac82c1892a9ad\n"
    },
    {
      "commit": "39402548017c99f9b33afaa851f412371013e911",
      "tree": "80c4d53cb7ae12ab9f4800cb358e53d5109593da",
      "parents": [
        "2fde9bdc252e209d722f83410f2ced42ab73e8a4"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sun Mar 24 02:47:16 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 29 18:18:00 2019 +0000"
      },
      "message": "Modernise code to use override specifier\n\nGenerated by clang-tidy, with IgnoreDestructors option enabled.\n\nTest: m checkbuild\nBug: 116509795\nChange-Id: I5dafa10c2cf605165581b8cf7dd2633ed101ed65\n"
    },
    {
      "commit": "119733d87242414100df7b9eedb6d1672a03ead6",
      "tree": "19ba75bd42d3c94a4de0684ae66f4078da1546a6",
      "parents": [
        "8a64e773d4d1221166c6a8206315b450e448705a"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 15:14:41 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 31 15:39:55 2019 +0000"
      },
      "message": "Revert \"Revert \"ART: introduce PALette abstraction layer\"\"\n\nThis reverts commit e6e01a0a00de80704ccb21c48d5d8bdee4470b77.\n\nBug:  122824298\nTest: art/test/testrunner/run_build_test_target.py -j50 art-test-javac\nTest: m out/target/common/obj/PACKAGING/hiddenapi-stub-flags.txt\nTest: frameworks/rs/build_rs.py\nChange-Id: If7b9ddca3daa80b75b3541abd283bf47d5b81118\n"
    },
    {
      "commit": "e6e01a0a00de80704ccb21c48d5d8bdee4470b77",
      "tree": "8f9cc651764686140accaadcfb8f77bf7572c24b",
      "parents": [
        "4b9d00aca9b025b545c9633b4605334c22fc4d2d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "message": "Revert \"ART: introduce PALette abstraction layer\"\n\nThis reverts commit 4b9d00aca9b025b545c9633b4605334c22fc4d2d.\n\nReason for revert: breaks renderscript mac and run_host_tests in master.\n\nChange-Id: I6024894a384c65f3e7d81b9c5bba8ebe8ce1b420\n"
    },
    {
      "commit": "4b9d00aca9b025b545c9633b4605334c22fc4d2d",
      "tree": "7984bf247f908d145b7c6b48df99f3f0a80ae148",
      "parents": [
        "4ee4561f2153f3b0bc3be2e781488a97c73ca58e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 03 17:04:02 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 09:00:27 2019 +0000"
      },
      "message": "ART: introduce PALette abstraction layer\n\nThis change decouples direct dependencies on system libraries.\n\nBug: 122824298\nTest: art/test.py --host --64\nTest: art/test.py --target -j8\nTest: m -j100 \u0026 flashall -w \u0026 device boots\nTest: art/build/apex/runtests.sh\nChange-Id: Iae927ed9aaa228a941cd444cef04e6ec53955299\n"
    },
    {
      "commit": "7458a7afdfe3046d962ea13dd0f6b176283505b2",
      "tree": "b4573042cc825952812de920f24c4af71322d509",
      "parents": [
        "ad1aa6340567c0660506069d760ff41483eb3821"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:32:11 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 03 09:19:10 2019 -0800"
      },
      "message": "ART: Refactor code_item_accessors\n\nRefactor to internal templated functions to not leak DexFile details\nprematurely.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I6f281703b750ec016e8cf18abfa55980a00506dd\n"
    },
    {
      "commit": "3f1dcd39e134d994ac88dcc4f30ec8cabcd8decf",
      "tree": "365d20ad6b68ff1dbd4903764b63880324136e4d",
      "parents": [
        "0f0a4e40667c87fbd4ae5480eddbfd701bfabfa2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 28 09:39:56 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:32:25 2019 -0800"
      },
      "message": "ART: Move dex structs into own header\n\nSeparating out the structs from DexFile allows them to be forward-\ndeclared, which reduces the need to include the dex_file header.\n\nBug: 119869270\nTest: m\nChange-Id: I32dde5a632884bca7435cd584b4a81883de2e7b4\n"
    },
    {
      "commit": "9b031f7e4834b263ae531409a9f6c82cfdc89477",
      "tree": "4b5fdfc3ecc12b5b7e32959bec0c26595b87d2ab",
      "parents": [
        "c71f38bdf7dca39a070ba25d436edcd758551f42"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 04 11:03:34 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 09 14:38:45 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles smaller subdirectories.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: I81c8f3396b9922684b68e9f3d8fccefe364f1279\n"
    },
    {
      "commit": "e5afbf335a8bc110ff7d4f86585a284c98a25a13",
      "tree": "7596a7b52e5f9a63b409969aba2805aaf012f199",
      "parents": [
        "7dca45b9677c16a54347cdc0d08bfa2bdd94b464"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 12 17:51:54 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 13 14:44:52 2018 -0700"
      },
      "message": "Refactor DecodeDebugLocalInfo\n\nRefactor the function to use a visitor instead of callback.\n\nTest: test-art-ghost\nBug: 112311591\nBug: 77709234\n\nChange-Id: I55385994952373b3fec4f9122400cf3c9d43da3b\n"
    },
    {
      "commit": "5eae4c5422127b86bf23dc8d80db98324c8b67ac",
      "tree": "4ced5c3272d386441160722c5ec4f15607631c04",
      "parents": [
        "e04da79cfca846efa5c5fe3f1a5fff94787c7ca8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 30 15:52:15 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 10 16:41:29 2018 -0700"
      },
      "message": "String representation performance measurements\n\nMeasure ns for comparison of equal and not equal strings.\n\nSample results:\n\nPrefix string timings\nCompare equal 27.7578\nCompare not equal 7.91009\nNormal string timings\nCompare equal 11.7484\nCompare not equal 3.36408\n\nBug: 112311352\nBug: 77709234\nTest: test-art-host\n\nChange-Id: Id40f8f3f3b12a48961df2e63301ae3359cb98613\n"
    },
    {
      "commit": "49ca869b7a79eaa7220eb61874fa79f1e45ba832",
      "tree": "c7e5dc76e46304dc4f27afcbb57fcfcd944129dc",
      "parents": [
        "6bfbdc7fe3751fb6af6ff65493ab9e0f74ed5ca8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 24 09:34:49 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 28 18:02:30 2018 -0700"
      },
      "message": "Add trie based greedy prefix construction\n\nDex savings for top 99 APKs:\nTrie based: 4.82%\nGreedy: 4.68%\n\nAlgorithm is to continuously pick the prefix that saves the most\nbytes until there are no more savings.\n\nTest: test-art-host\nBug: 77709234\nBug: 112311352\n\nChange-Id: I686cfc35a1f17494294816493fb2a1107f3cd114\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "a5ea63760beaa8e6f3b5104abfc5717295c8eba0",
      "tree": "b008dbe00cec219a51e312d4ddfae128a1269392",
      "parents": [
        "4a7133d666976967c1cf7f9be70e159bab60a863",
        "0ddf62697f676027705cf785267b49ed1520c0ea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 27 16:53:35 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 27 16:53:35 2018 +0000"
      },
      "message": "Merge \"Move string analysis to its own file\""
    },
    {
      "commit": "0ddf62697f676027705cf785267b49ed1520c0ea",
      "tree": "301335988bdd67d5cd5896d34c280d91cf257f6f",
      "parents": [
        "19759b28bc9dad1581c207d76227eb74fc8eebcb"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 23 17:37:46 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 23 17:49:03 2018 -0700"
      },
      "message": "Move string analysis to its own file\n\nBug: 112311352\nBug: 77709234\nTest: test-art-host\n\nChange-Id: I9ed6f5ae3534584ced594fe348ec52d91b52a98f\n"
    },
    {
      "commit": "cd2edfc99c07e958cd926ae61a74ee01a32666a2",
      "tree": "fb71bb569db20bb35f771388be5ae537835951d2",
      "parents": [
        "19759b28bc9dad1581c207d76227eb74fc8eebcb"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Aug 19 15:38:32 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 23 15:39:43 2018 -0700"
      },
      "message": "Add measurement of linkage pairs\n\nPrint most commonly used linkage pairs to see if it efficient to add\na table.\n\nAlso some random cleanups.\n\nBug: 77709234\nBug: 77808483\nTest: test-art-host\n\nChange-Id: Ibb4edc06b2ae922a219e4edc057e3361ac357346\n"
    },
    {
      "commit": "3782c870e9c563bef11981ab61aee6c112c329b1",
      "tree": "5c85849a69025979945e9827491c5e097b1aead0",
      "parents": [
        "92a97be0450977e40b969dec8fde66caf4aa8287"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 14 19:25:47 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 14 20:19:37 2018 -0700"
      },
      "message": "Update bytecode experiments\n\nAdd a constexpr boolean for always storing the invoke result in r0.\n\nCleaned up instruction blob counting to be correct for added prefix\ninstructions.\n\nBug: 77808483\nBug: 77721545\nTest: test-art-host\n\nChange-Id: If03451e879cccb30a544a1bb597698fa658e032e\n"
    },
    {
      "commit": "b6240093ea3e0fcf87f76f4dcbf86f42366a694f",
      "tree": "8e0a388473dca7196b30574782b73df2bbe17b86",
      "parents": [
        "9acb522e35e3302786a338c7f50585dd412d68d3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 27 13:26:48 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 27 15:20:11 2018 -0700"
      },
      "message": "Add string prefix optimization\n\nOptimize until fixed point by reducing to shorter prefixes if there\nare savings.\n\nThis dictionary optimization saves up to 2.6% more. Average prefix\nsavings are 4.6% on top 99 APKs.\n\nTest: test-art-host\nBug: 77709234\nBug: 77721545\nChange-Id: I8e9e3aaf06ded9fde0153e8236f8c6b56450d881\n"
    },
    {
      "commit": "6250dfa22577160b270f3f3165260739707cf7d3",
      "tree": "2b68128ea361e61d1186252a5ba1e98277fc9585",
      "parents": [
        "125a47c0d5c77894eeef2229ec26e72a42bfa5e5",
        "e166facea335b9adcff7717d6d30150a41718668"
      ],
      "author": {
        "name": "Dario Freni",
        "email": "dariofreni@google.com",
        "time": "Fri Jul 20 08:59:35 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 20 08:59:35 2018 +0000"
      },
      "message": "Merge \"Add a public error code to DexFileLoader::OpenAll.\""
    },
    {
      "commit": "e166facea335b9adcff7717d6d30150a41718668",
      "tree": "fee3bff71f8820141c6f58b9e733677c9c0e906e",
      "parents": [
        "6743f1ebd4a1a266896541acb5c4dde1f78e708f"
      ],
      "author": {
        "name": "Dario Freni",
        "email": "dariofreni@google.com",
        "time": "Mon Jul 16 11:08:03 2018 +0100"
      },
      "committer": {
        "name": "Dario Freni",
        "email": "dariofreni@google.com",
        "time": "Thu Jul 19 16:12:13 2018 +0100"
      },
      "message": "Add a public error code to DexFileLoader::OpenAll.\n\nSome of the APKs in the build system don\u0027t contain any dex file (e.g.\nthey are only there to test that PackageManager can install them).\nUsers of this library (e.g. veridex) can now verify the error condition\nto determine whether they should just skip the file or propagate the\nerror.\n\nTest: m test-art-host-gtest; ran veridex on an APK without classes.dex\nBug: 110073830\nBug: 78924201\nChange-Id: I65b6a5aa8abb404a77b90352dd066fb0dff36955\n"
    },
    {
      "commit": "8a0ede9be3a763e12557eead5c8312769687a9de",
      "tree": "66c0a7ccfbe9122c7183bf5ed3786387ad62d170",
      "parents": [
        "33602449cf4e315330a460d8dbccdbda6bdef7da"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 12 10:24:04 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jul 16 18:25:55 2018 -0700"
      },
      "message": "Add analysis for move-result target\n\nAdded analysis for target of move-result. Removed useless counters.\n\nAdded verbosity options to reduce spam:\n-0: Print only summary\n-1: Print summary and distribution\n-2: Print all the things\n\nTest: test-art-host\nBug: 77721545\n\nChange-Id: Ib002754d4f50fdf4a3d2e57c83d565dc8d64a054\n"
    },
    {
      "commit": "fbc80036e833891b91706bbd9f5c7adb40f97582",
      "tree": "bfea252bc25bc4ff78fb78d2499b6816f0c41a3a",
      "parents": [
        "f3c3e83d3a98bd3ca388fca32f1c277a7945e1e3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 11 11:20:08 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 11 11:20:20 2018 -0700"
      },
      "message": "Refactor InstructionBuilder into NewRegisterInstructions experiment\n\nReduces the amount of boiler plate code.\n\nBug: 77721545\nTest: test-art-host\n\nChange-Id: Ib5baf7768ba5f8e6aa6c8644b5aabbd35e834df5\n"
    },
    {
      "commit": "b0741fc084ebca6f0dd7942fda1e5236fd916022",
      "tree": "23b64d702e03a413dce4db22e06c73181f628939",
      "parents": [
        "b808ddca3d4816132f6f05bebcc6676144b1f6b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Jul 07 13:54:44 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Jul 07 14:12:27 2018 -0700"
      },
      "message": "Fix typo in INSTANCE_OF bytecode analysis\n\nShould have been VRegA_22c instead of VRegB_22c.\n\nTest: manual\nChange-Id: I0799465a65b45f64eb5cd229c2cf96959067cc97\n"
    },
    {
      "commit": "12dd8a90af1f1cfae172f6d9c3443808c4fb6e40",
      "tree": "452b6f4de6b9054ede8528c1e3ea97933e642c75",
      "parents": [
        "d20a4d76c33cd6e609ad6b1b3cde09fdcbdde05c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 12 11:17:22 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 29 10:45:37 2018 -0700"
      },
      "message": "Add bytecode conversion experiments\n\nAdd a few new instructions and measure savings:\ninvoke-xx-[1-4]-[move-result].\niget/set-this\nnew-instance-invoke-this\nif-eqz4\nif-nez4\netc..\n\nCumulative Dex bytecode savings are ~14% of the Dex size.\n\nTest: test-art-host\nBug: 77721545\n\nChange-Id: Ibe2b04614e2c5782612b515fbb7f77dbcf9eb66c\n"
    },
    {
      "commit": "6e75beeee0a92b235192b775282cf1573770fa09",
      "tree": "13b3a19cb3ce7b499e12966170e491dd137fb3d4",
      "parents": [
        "639f5150805006a2c3a07daa804abcdba0bc3ece"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 27 10:53:29 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 27 10:55:02 2018 +0100"
      },
      "message": "dexanalyze: distinguish fields from other classes.\n\nTest: Manulally run dexanalyze.\nChange-Id: I2428be2cf0a5e738307fb792f1a932bb0e9a3d9e\n"
    },
    {
      "commit": "93bffccaf34ef5a9bd8428089a04046ddb968310",
      "tree": "65fbd293b0319701f4015c32a0eeb70276317ef1",
      "parents": [
        "a20f969ef303e01e503e51809388bdb406c72238"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 26 15:49:16 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 26 18:12:36 2018 +0100"
      },
      "message": "dexanalyze: Improve field analysis.\n\nAnalyze also SGET/SPUT and better estimate the savings based\non given field index and in/out cutoff.\n\nExperiments with core-oj indicate that the cutoffs 16/16 are\ngood for IGET/IPUT but SGET/SPUT would benefit more from\n32/8 (assuming we want to use 8 bits together for the field\nindex and in/out).\n\nTest: Manually run dexanalyze.\nChange-Id: Id7cddaf20be4b345516777be6fbc599aed79ac5b\n"
    },
    {
      "commit": "5840c84554456c5cc5a8cbc5933b1c0a5b6cb15d",
      "tree": "5ed47dcf70cc98203a426b895baba4241cdabb2b",
      "parents": [
        "73e8d8367cb394f8deb7b94dfff0861074f5eb56"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 15 09:07:05 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 20 14:19:57 2018 -0700"
      },
      "message": "Count unique string, method names, and type names\n\nSample results (per APK):\nUnique method names: 1385861(15.03%)\nUnique field names: 1986979(16.25%)\nUnique type names: 1944509(78.46%)\n\nBug: 77721545\nTest: test-art-host\n\nChange-Id: I4c809aed5d5ca9d8e81f113955b3430a673d67f2\n"
    },
    {
      "commit": "5d16154ee466edafe19e19178c0c75d68d567b70",
      "tree": "1413adfaa645f333dc8a3d52acdd12b91c014cae",
      "parents": [
        "1e739fa94947147953c53e92964e0e9e1eac0526"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 31 11:02:39 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 12 12:27:15 2018 -0700"
      },
      "message": "Analysis of field iget/iset on first arg register\n\nAnalyze how many instance field gets/sets are operating on the first\narg register and how many are using one of the first 16 instance\nfields.\n\nTest: test-art-host\n\nChange-Id: I26c21f209ef6fcbed0b4a8446b3f226e56a75de3\n"
    },
    {
      "commit": "48de723721a9103bc3374c00f1e18ee7dcaea49a",
      "tree": "17a804455d5ac9b01e365f083a83e393ab06382b",
      "parents": [
        "b1daf3469a2073837c1a236c13bd6666e4aae9f1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 01 17:30:29 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 01 17:34:40 2018 -0700"
      },
      "message": "Refactor experiments to allow multidex analysis\n\nAnalyze multidex deduplication for debug infos when excluding the\nheader fields.\n\nBug: 77721545\nTest: test-art-host\n\nChange-Id: I247399aaecaf072cce1b3e035256db0f5e91e8c3\n"
    },
    {
      "commit": "31380c788d77dc7efc451817c3619c454507007d",
      "tree": "27314c6633950592bf3bb4425506d9fa60a4656d",
      "parents": [
        "cb4c8b59436bcec4f785656ed90aa8c3fd37b986"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 31 18:12:27 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 01 13:13:28 2018 -0700"
      },
      "message": "Add experiment for analyzing debug info\n\nAnalyze entropy of debug info to estimates a close upper bound\nsavings from huffman encoding debug infos.\n\nAlso measure how many debug info bytes are dedupable if you exclude\nthe line number and parameter names.\n\nSample output:\nDebug info bytes 96101012(5.70%)\n  DBG_END_SEQUENCE: 6401069(0.38%)\n  DBG_ADVANCE_PC: 3709064(0.22%)\n  DBG_ADVANCE_LINE: 8620724(0.51%)\n  DBG_START_LOCAL: 5244232(0.31%)\n  DBG_START_LOCAL_EXTENDED: 1763845(0.10%)\n  DBG_END_LOCAL: 1216044(0.07%)\n  DBG_RESTART_LOCAL: 565412(0.03%)\n  DBG_SET_PROLOGUE bytes 5768714(0.34%)\n  DBG_SET_FILE bytes 0(0.00%)\n  special: 36310220(2.15%)\nDebug info entropy 69199724(4.10%)\nDebug info opcode bytes 55613021(3.30%)\nDebug info opcode entropy 34792401(2.06%)\nDebug info non header bytes 69599324(4.13%)\nDebug info deduped non header bytes 52475493(3.11%)\n\nBug: 77721545\nTest: test-art-host\nChange-Id: I031322e3b79a1572fcbb9e513ded9708e3b48354\n"
    },
    {
      "commit": "b7ae0b1a9874c65682c22883061ec8e7fae1fea3",
      "tree": "0e424172d39d6484ece30b4e4da2bea50c7b7684",
      "parents": [
        "6a084834f06a31ea6f15db27420a8240fe64f033"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 29 09:25:57 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 30 13:27:25 2018 -0700"
      },
      "message": "Add experiments for Dex bytecode analysis\n\nCount how many move-result instructions are directly following\ninvokes with less than 5 args.\n\nBug: 77721545\nTest: test-art-host\n\nChange-Id: Icd3be78260b9117660d734f50303a8e3bc030325\n"
    },
    {
      "commit": "0d896bd7da4f7b11559aa88aad82e9a9e170a4e4",
      "tree": "44a9278d98ace169e8296feba98038c173f29eaf",
      "parents": [
        "267c83529850f51cd690b3e31882aaae98601afd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 25 00:20:27 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 29 10:20:59 2018 -0700"
      },
      "message": "Add Method/Field iterator to ClassAccessor\n\nEnables ranged based for loops on fields and methods.\n\nFor visiting both fields and methods, VisitFieldsAndMethods will\nbe faster because of not needing to decode the fields twice for\nseeking purposes.\n\nAdded test.\n\nBug: 79758018\nBug: 77709234\nTest: test-art-host-gtest\n\nChange-Id: I593e23ccd138b87a27d8bab6927ff2b685c057f3\n"
    },
    {
      "commit": "ad70b322fe9b2d3601dcdcfab915b651716ee448",
      "tree": "0a5a2be29619a8976af23bfd0e91a23facbe4597",
      "parents": [
        "43efe77ff33d917d90f89b43d164cdd341d4c4d4",
        "7c3a8c1679c9356d80e0fc1afa7471b056a5b779"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 25 18:47:27 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 25 18:47:27 2018 +0000"
      },
      "message": "Merge \"Add measurement of Dex code bytes and number of unique code items\""
    },
    {
      "commit": "c8c8d5f484b9e4660de288aa51ce3f831317ee53",
      "tree": "fa329a0787a0e302ff40c7deefa97d5b79b28550",
      "parents": [
        "d804b76c0b8f9d2c94f3a8648aba26254742a1e2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 22 11:56:14 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 24 10:48:53 2018 -0700"
      },
      "message": "Move compiler/ to ClassAccessor\n\nRemove usages of ClassDataItemIterator to reduces boiler plate code.\n\nBug: 79758018\nBug: 77709234\nTest: test-art-host\n\nChange-Id: Id41db3299bba3ea8debcbb0b9c721fa675adc064\n"
    },
    {
      "commit": "7c3a8c1679c9356d80e0fc1afa7471b056a5b779",
      "tree": "1c1dcba73b606c94aab8e8681f0601d996afddf6",
      "parents": [
        "05dc23eab55efcfbd13a3de59864d0491e87b834"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 23 18:09:45 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 23 18:09:45 2018 -0700"
      },
      "message": "Add measurement of Dex code bytes and number of unique code items\n\nAlso modified -i option to also ignore Dex verificaiton, this allows\ndumping jars that have gone through hidden API tool.\n\nBug: 77721545\nTest: test-art-host\nChange-Id: If608c0cddd232be465c5df9cdf9b06025e68ea83\n"
    },
    {
      "commit": "05dc23eab55efcfbd13a3de59864d0491e87b834",
      "tree": "baa2ac740d54d849f2c8c71dbe536f1fa63d3716",
      "parents": [
        "ac1cec6eae1646fede5a7355699a317a93a88ac5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 22 11:56:14 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 23 13:27:52 2018 -0700"
      },
      "message": "Add ClassIterator\n\nAdd a way to iterate over all of the classes in a Dex file. The\niterator returns a ClassAccessor for each class.\n\nAdded DexFile::GetClasses to return an iteration range for this new\niterator type.\n\nSample usage:\nfor (ClassAccessor accessor : dex_file.GetClasses()) {\n\nBug: 79758018\nBug: 77709234\nTest: test-art-host\nChange-Id: I66e000aa11f433e72f6857496f4e89a0b811f5a2\n"
    },
    {
      "commit": "c2b4db61e5d0d9ec40b87b9a051aa1ac15ed1294",
      "tree": "7d8ba5f2ab1c8ff66b17ce2352be3d7f0e12651c",
      "parents": [
        "8926b780fd75f23e8685e108e2d3f4905f3809fd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 18 13:58:12 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon May 21 12:59:22 2018 -0700"
      },
      "message": "Add ClassAccessor\n\nAims to replace ClassDataItemIterator with a cleaner and simpler\nabstraction.\n\nBug: 77709234\nBug: 79758018\nTest: test-art-host\n\nChange-Id: I871a3e1cf213e0d81bfe4bb77790fbab2d13e44c\n"
    },
    {
      "commit": "f275979ca2d2809d19210195c22526861554fac0",
      "tree": "f44938cb2e68496cdc32883ce5064efdd2e8461c",
      "parents": [
        "fc2f8b6d93d05a689f634f6a70bd68376d8265f8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 18 13:16:54 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 18 13:18:05 2018 -0700"
      },
      "message": "Add ASCII vs UTF-16 string data analysis\n\nMeasure how many strings are fully ASCII characters or a UTF-16 mix.\n\nBug: 77721545\nTest: test-art-host-gtest-dexanalyze_test\nChange-Id: Ic59613596c1542c693bcf49cee379310414c44cd\n"
    },
    {
      "commit": "fc2f8b6d93d05a689f634f6a70bd68376d8265f8",
      "tree": "2d43fa751fa0c4d643520b8eef4369d341c75e8a",
      "parents": [
        "df810b9c8d5013cd6f5799a75b6aaf0f3991210c",
        "0226c1d40d6532757fc258cb0586a338a8cd2931"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 17 18:52:05 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 17 18:52:05 2018 +0000"
      },
      "message": "Merge \"Add some extra dexanalyze tests\""
    },
    {
      "commit": "df810b9c8d5013cd6f5799a75b6aaf0f3991210c",
      "tree": "ad66354ce172285273431bfa69922fc12ae4135a",
      "parents": [
        "ca768656c65109d43270949d1acceb2618738e4a",
        "1f010164bea4714e9f653c52e8948c5d5305040b"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu May 17 17:13:53 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 17 17:13:53 2018 +0000"
      },
      "message": "Merge \"Move ArtDexFileLoader to libdexfile\""
    },
    {
      "commit": "0226c1d40d6532757fc258cb0586a338a8cd2931",
      "tree": "f18dd1bf1359ae76c5d029a3b0d00c425b1bb8af",
      "parents": [
        "a7d37cf735f05cfc3a3585a5c44eb65d8a279874"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 17 00:19:12 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 17 10:09:55 2018 -0700"
      },
      "message": "Add some extra dexanalyze tests\n\nBased on dexdump tests, test for:\n- Missing arguments\n- Invalid input\n- Using core dex as input\n\nTest: test-art-host-gtest-dexanalyze_test\nBug: 77721545\n\nChange-Id: I8ce0607b6d3d60171de00a83047536195a81e26f\n"
    },
    {
      "commit": "35ddc6fc26594326ddfddeac447e7aa1321726ff",
      "tree": "b27f3318586c5260d47fb68b36783f08b2a1d9f3",
      "parents": [
        "a7d37cf735f05cfc3a3585a5c44eb65d8a279874"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 09 11:34:07 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 16 17:57:06 2018 -0700"
      },
      "message": "Add some experiments to analyze string usage\n\nAnalyze shared prefixes for strings across dex files and estimate\npossible savings from supporting a per string prefix. The estimation\nis not yet optimal.\n\nBug: 77709234\nTest: dexanalyze\n\nChange-Id: I2e9f8a09595b54ea4a3e331efde32f9c1689fc82\n"
    },
    {
      "commit": "1f010164bea4714e9f653c52e8948c5d5305040b",
      "tree": "e69b2c3f4d2645d4097655f8914325945fe5dbbd",
      "parents": [
        "a7d37cf735f05cfc3a3585a5c44eb65d8a279874"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue May 15 08:59:32 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed May 16 13:01:34 2018 -0700"
      },
      "message": "Move ArtDexFileLoader to libdexfile\n\nAdds a dependency from libdexfile on libartbase, but allows the use of\nMemMap loaders, etc.\n\nBug: 78652467\nTest: make -j 40 checkbuild\nChange-Id: I15cf33893ca9192050762f8350a3cc1e39f88dc5\n"
    },
    {
      "commit": "1fee5dc295f32c6b1426e9de8a2fede86d0464f2",
      "tree": "31783c7813f97271c8d59d27bf31f2f8decd5057",
      "parents": [
        "6623bc389c43efc87668ce7465e19b195e765e22"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon May 14 14:20:51 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon May 14 14:23:14 2018 -0700"
      },
      "message": "Use std::cout for dexanalyze logging\n\nThe ART default logger prints more info than required.\n\nBug: 77721545\nBug: 77709234\nTest: manual\n\nChange-Id: Id0cd74e1dd2632c5c203cb5ab2027effb4a72af7\n"
    },
    {
      "commit": "ef2fa26b0c4549ccee4b6c2a2b2d2caae6b85edc",
      "tree": "41b06b13faf6a2b69b03900c25d07650162c899c",
      "parents": [
        "fe6cf7cb0865cc1710d14ff8a41817794e965ea5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 12 15:14:07 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 12 15:17:16 2018 -0700"
      },
      "message": "Move dexanalyze experiments to their own file\n\nReduce how much code is in the main file.\n\nBug: 77721545\nTest: test-art-host-gtest-dexanalyze_test\nChange-Id: I03e00b954170ff2e602edaa2e019f96e54016ecf\n"
    },
    {
      "commit": "2e0478a62e314ff4ce2334da7608543fa93e7c68",
      "tree": "871b75216bf0fd227fb17a0c738289edffaf0a82",
      "parents": [
        "dc83dea435e059b7ff0969636d0a6bec689e60f6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 06 14:33:25 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 11 14:47:01 2018 -0700"
      },
      "message": "Add dexanalyze tool\n\nUsed to gather statistics about dex files.\n\nSample output:\nCumulative analysis for 240 DEX files\nNum string ids: 9809636\nNum method ids: 11334990\nNum field ids: 8281881\nNum type ids: 2291729\nNum class defs: 1604550\nSame class direct: 1577080\nOther class direct: 5114002\nSame class virtual: 2118445\nOther class virtual: 15998142\nSame class static: 693507\nOther class static: 6496367\nNum strings accessed from code: 5832974\nUnique(per class) method ids accessed from code: 15169103\nUnique(per class) string ids accessed from code: 4279695\nSame class invoke: 4389032\nOther class invoke: 27608511\nInvokes from code: 31997543\n\nBug: 77709234\nBug: 77721545\nTest: time dexanalyze -count-indices \u003cAPKS\u003e\nTest: mm test-art-host-gtest-dexanalyze_test -j64\nTest: mm test-art-target-gtest-dexanalyze_test -j64\n\nChange-Id: I3cd3fd10a9c540c7780942fc33f4eb4c7ff5d914\n"
    }
  ]
}
