History log of /art/runtime/jit/profile_saver.h
Revision Date Author Comments
e6564f4efe74b2bb505a5810852141404b82a4a9 19-Mar-2018 David Sehr <sehr@google.com> Move some remaining dex utilities

There were several utilities related to building/walking/testing dex
files that were not in libdexfile. This change consolidates these.

(cherry picked from commit 312f3b2fd0094c028a7d243b116947a35a745806)

Bug: 22322814
Test: make -j 50 test-art-host
Merged-In: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0
Change-Id: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0
67bf42e89592c3a1c648f927f2ce3ccb189a1161 27-Feb-2018 David Sehr <sehr@google.com> Header library to remove dependence on runtime/

Add a new header library to remove libdexfile and others' dependence on
runtime (typically runtime/base) includes in libdexfile. Also a small step
to tease dexlayout and profman away from relying on these as well.

Bug: 22322814
Test: make -j 50 checkbuild
make -j 50 test-art-host-gtest

Change-Id: I38e2fe399a75f4bc6318c77a71954c00ea73ec2b
06bed3009b94b392ce6be43d72f4b10803565c72 13-Jul-2017 Mathieu Chartier <mathieuc@google.com> Revert "Revert "Record post startup methods in profile""

Test: test/run-test 595-profile-saving

This reverts commit a867f7ab437dd6c1458088964986d0fe7275625c.

Change-Id: I2826bdddda446925856991de4b0b786c8c05831e
a867f7ab437dd6c1458088964986d0fe7275625c 13-Jul-2017 Nicolas Geoffray <ngeoffray@google.com> Revert "Record post startup methods in profile"

Breaks target tests.

This reverts commit 5594f11fa8a8a1efc24d1b258592f68cf462eec8.

Change-Id: I5ff4aab14bb241e287f042a9a90458e61306985e
5594f11fa8a8a1efc24d1b258592f68cf462eec8 08-Jun-2017 Mathieu Chartier <mathieuc@google.com> Record post startup methods in profile

Record post startup methods in the profile by visiting the methods
for all the loaded classes. This data will be used for layout
optimizations and generating the boot image profile.

The maps profile size doesn't seem to get larger after doing a basic
post launch use case. The change in profile size is hard to reliably
measure.

Verified by dumping a profile with profman and confirming that
there are post startup methods in the profile.

Added test to 595-profile-saving.

Did a test for maps to see how long we hold the class table lock. The
results are 4ms in the longest case. This should be short enough to
not cause jank if run every 20s or so.

Test: test-art-host
Bug: 36457259
Change-Id: I82e36957fcdc8d9e072c0193478bd1ef0ce09a67
e276589f2f14f217018f323f5457790b84569fb4 20-May-2017 Calin Juravle <calin@google.com> Use arena allocation for profiles

By using our arena allocator we can madvise the memory used during
profile processing right way. jemalloc may defer the release based on
unpredictable native allocation.

The other advantage of arenas is a much simpler way to measure the
memory needed by profiles.

Test: m test-art-host
Test: manual inspection with meminfo and heaptrack
Bug: 37711886

(cherry picked from commit cc3171ab3af35b4e4ad5671d7425aa8a6bfcc5f3)

This change also squashes 2 fixes on the orginal submit.
(cherry picked from commit 798ba16bda747d74a27b7a748d3bb5deb2ccbf68)
(cherry picked from commit e6f87cc95e5351f3872a4c50e18915a282578ff8)

(partial cherry picked from commit
55232f13e4a34ab36c13f337642b57f9def00da8 to fix dexdiag formating and
please the bot)

Merged-In: I2066b6654438474c10b17d5d92538a6095748684
Change-Id: I91741229a807c777631ef324fc3f397c9a0c18e3

Bug: 37711886
cc3171ab3af35b4e4ad5671d7425aa8a6bfcc5f3 20-May-2017 Calin Juravle <calin@google.com> Use arena allocation for profiles

By using our arena allocator we can madvise the memory used during
profile processing right way. jemalloc may defer the release based on
unpredictable native allocation.

The other advantage of arenas is a much simpler way to measure the
memory needed by profiles.

Test: m test-art-host
Test: manual inspection with meminfo and heaptrack
Bug: 37711886

Change-Id: Ib656a8ac63600477ff553831087a83dc40d9c537
dcab19095959865f03f63ad39dfaa8769c704a72 13-May-2017 Calin Juravle <calin@google.com> Do not cache profiles in the ProfileSaver.

Profiles with a lot of inline caches have a large memory
footprint. Do not cache them in the saver anymore.

The cache was useful to avoid doing unnecessary IO but it
takes too much memory now. Disable it until we update the
profile format to take less space.

This trades off IO for memory. As an effect we will do one extra
read to detect if we have enough new information worth saving. The
saving period has been increased to 40secs (from 20) in a previous
CL which also helps to balance the IO.

Test: m test-art-host-gtest
manual inspection with meminfo
Bug: 37711886

Change-Id: I9cfdd6fb70c289221e74ccf1b6449f28a7fb693d
3dd18cf4781d76565fff3460bd4efeebd188b6c6 13-May-2017 Calin Juravle <calin@google.com> Do not cache profiles in the ProfileSaver.

Profiles with a lot of inline caches have a large memory
footprint. Do not cache them in the saver anymore.

The cache was useful to avoid doing unnecessary IO but it
takes too much memory now. Disable it until we update the
profile format to take less space.

This trades off IO for memory. As an effect we will do one extra
read to detect if we have enough new information worth saving. The
saving period has been increased to 40secs (from 20) in a previous
CL which also helps to balance the IO.

Test: m test-art-host-gtest
manual inspection with meminfo
Bug: 37711886

(cherry picked from commit ea220658bf6ff920c5a6c658e4643da09560d278)

Change-Id: Iddf93b2f07faf4c897ac43931f41aa1e8c2a6bc4
5df637a64847f35e3ff2728c842887ab20b3fd6b 06-May-2017 Calin Juravle <calin@google.com> Resolve the tracked locations in profile saver

The profile saver takes the dex locations it has to track as they are.
On the buildbot the locations are symlinked, but the dex file may be
compiled with an absolute path. This may cause a mismatch and cause the
dex file to not be profiled (test 595-profile-saving will fail).

Note that this is a valid use case in production as well. It may happen
for secondary dex files which can be loaded via symlinks.

Test: test/run-test --output-path /tmp/link --always-clean --host --prebuild --interpreter --no-relocate --runtime-option -Xcheck:jni --no-image --64 595-profile-saving
test/run-test --output-path /tmp/link --always-clean --host
--no-prebuild --jit --no-relocate --runtime-option -Xcheck:jni
--runtime-option -verbose:profiler --64 595-profile-saving

Bug: 36605597

(cherry picked from commit 8b5d9b614ad9f13e2cb62d4956252677cd71add1)

Change-Id: I43866c6cf7ce6f33ac4386bb4fe07b88bb35e793
8b5d9b614ad9f13e2cb62d4956252677cd71add1 06-May-2017 Calin Juravle <calin@google.com> Resolve the tracked locations in profile saver

The profile saver takes the dex locations it has to track as they are.
On the buildbot the locations are symlinked, but the dex file may be
compiled with an absolute path. This may cause a mismatch and cause the
dex file to not be profiled (test 595-profile-saving will fail).

Note that this is a valid use case in production as well. It may happen
for secondary dex files which can be loaded via symlinks.

Test: test/run-test --output-path /tmp/link --always-clean --host --prebuild --interpreter --no-relocate --runtime-option -Xcheck:jni --no-image --64 595-profile-saving
test/run-test --output-path /tmp/link --always-clean --host
--no-prebuild --jit --no-relocate --runtime-option -Xcheck:jni
--runtime-option -verbose:profiler --64 595-profile-saving

Bug: 36605597
Change-Id: I0126d5255fd663d232a3f7fc50ce7d715072872a
07ea07ea30aa293fd9d4cc764ec27b1d769014f1 06-Apr-2017 Mathieu Chartier <mathieuc@google.com> Force save profiles for SIGUSR1

Force save profiles from signal catcher for SIGUSR1. Saving the
profiles is expensive but we already do a GC which is also expensive
for this signal.

Test: adb shell ls -l /data/misc/profiles/cur/1000/system_server/
Test: adb shell kill -s SIGUSR1 `pid system_server`
Test: adb shell ls -l /data/misc/profiles/cur/1000/system_server/

Bug: 36457259
Bug: 34927277

(cherry picked from commit 8f23d97af3b10ae56fb16d63fd2932098dac45c0)

Change-Id: I810b66a7fe4b06efc7468d65ac737d74c5669abe
8f23d97af3b10ae56fb16d63fd2932098dac45c0 06-Apr-2017 Mathieu Chartier <mathieuc@google.com> Force save profiles for SIGUSR1

Force save profiles from signal catcher for SIGUSR1. Saving the
profiles is expensive but we already do a GC which is also expensive
for this signal.

Test: adb shell ls -l /data/misc/profiles/cur/1000/system_server/
Test: adb shell kill -s SIGUSR1 `pid system_server`
Test: adb shell ls -l /data/misc/profiles/cur/1000/system_server/

Bug: 36457259
Bug: 34927277
Change-Id: I1852bba1a7f47b378ba0321edf951bca942b3c39
a345d3144c56e510866848fd677b05adc7780189 15-Mar-2017 Calin Juravle <calin@google.com> Ensure the profile is written to disk at shutdown

Force profile saving during shutdown. It will make benchmark automation
much easier.

Test: test-art-host
Bug: 26719109
Change-Id: I529aa1a7b1192c53960fdb4ddc13b10b99e846cc
51e417b45fa13050318715d2ad3da99d90b5f334 15-Mar-2017 Calin Juravle <calin@google.com> Tweak ProfileSaver saving strategy

To minimize the I/O, we used to store the number of methods/classes we
last saved globally in the profiler saver. This is no longer viable once
we want to track secondary dex files for profiling because each file
might save a different set of methods.

To make sure we do not miss data for secondary dex profiles,
store the number of last saved methods separetely for each profile file.

Test: test-art-host
Bug: 26719109
Change-Id: I3a657f63d26f68c7ca83a754f6e4aa2c9d946176
77651c4bbd56d502bcf05347e641061bbebca099 04-Mar-2017 Calin Juravle <calin@google.com> ART: Clean up code related to foreign dex use

We simplified the way we track whether or not a dex file is used by
other apps. DexManager in the framework keeps track of the data and we
no longer need file markers on disk.

Test: device boots, foreign dex markers are not created anymore

Bug: 32871170

(cherry picked from commit 868515e2606820ea96f8b9022b442f5bcc770867)

Change-Id: If51b3301c845a8c3bbaf87d0e35a12c700e1d0aa
Merged-In: I5a04d3bba29581dedf05e21b8b20d79afa9b405a
868515e2606820ea96f8b9022b442f5bcc770867 04-Mar-2017 Calin Juravle <calin@google.com> ART: Clean up code related to foreign dex use

We simplified the way we track whether or not a dex file is used by
other apps. DexManager in the framework keeps track of the data and we
no longer need file markers on disk.

Test: device boots, foreign dex markers are not created anymore

Bug: 32871170
Change-Id: I5a04d3bba29581dedf05e21b8b20d79afa9b405a
33083d626dbf2c8b06badfd73f50e98114483059 19-Jan-2017 Calin Juravle <calin@google.com> Rename offline_profiling_info to profile_compilation_info

This solves a long standing TODO to align the names of the files and the
class.

Bug: 32434870
Test: test-art-host

Change-Id: I2707da8fef8736a7223189d894fc00ff11bfab12
138dbff9246c89ac9fbe0b086b54fdab3f4451fb 28-Jun-2016 Calin Juravle <calin@google.com> Clean up profiler options

- remove obsolete options
- using ProfileSaverOptions instead of hard-coded values in the profile
saver

Bug: 24698874
Change-Id: I4ff535d29a644d1bd5509844f89615b70a723749
Test: cmdline_parser_test, gtest and run-tests pass.
27ed3a44e87690595f612f6ca03a6c8e6f38451c 18-May-2016 Mathieu Chartier <mathieuc@google.com> Add methods with samples during launch to profile

For the snapshot taken after application launch we look at all of
the methods with one or more samples.

Bug: 28750506

(cherry picked from commit c600eaa1089342db81ac1869437199efc1f6053b)

Change-Id: Id8de4ee61c3f0b7594e638049fdd9d0848b49684
c600eaa1089342db81ac1869437199efc1f6053b 18-May-2016 Mathieu Chartier <mathieuc@google.com> Add methods with samples during launch to profile

For the snapshot taken after application launch we look at all of
the methods with one or more samples.

Launch time:
books: 1933ms -> 1457ms (33% speedup).
plus: 1361ms -> 1260ms (8% speedup)
music: 3085ms -> 2963ms (4% speedup)
maps: 1583ms -> 1390ms (14% speedup)

Oat sizes:
books: 10871424 -> 13365888 (+23%)
plus: 17715624 -> 19493288 (+13%)
music: 17076864 -> 18289280 (+7%)
maps: 32264832 -> 35787392 (+12%)

Bug: 28750506

Change-Id: I3a955dc74b41a96911254ac5087de77bea2267c7
a26389234ac66a4a5042c7bf7195c6531663d24d 29-Apr-2016 Calin Juravle <calin@google.com> Adjust ProfileSaver strategy

Change to a notification based strategy (instead of polling):
- the JIT notifies the ProfileSaver everytime it attempts a compilation
or generate (in a task) a ProfileInfo object for the method
- once a certain number of hot methods notification are received,
ProfileSaver wakes up the thread to do the analysis
- a wake up does not equal to I/O since the during processing we might
realized that's actually not enough new data.
- ProfileSaver throtles the request and ensures it doesn't do the
processing more often than kMinSavePeriodNs.

The new strategy avoids waking the thread unnecessary during extended
idle periods when we don't JIT.

Bug: 26815940

(cherry picked from commit 5fbb0fe0625a1f76aa33cd78ccf1a17b00d8f6d1)

Change-Id: Ifbac3a53c025e00a3faab6784bbfa679c6b42acb
5fbb0fe0625a1f76aa33cd78ccf1a17b00d8f6d1 29-Apr-2016 Calin Juravle <calin@google.com> Adjust ProfileSaver strategy

Change to a notification based strategy (instead of polling):
- the JIT notifies the ProfileSaver everytime it attempts a compilation
or generate (in a task) a ProfileInfo object for the method
- once a certain number of hot methods notification are received,
ProfileSaver wakes up the thread to do the analysis
- a wake up does not equal to I/O since the during processing we might
realized that's actually not enough new data.
- ProfileSaver throtles the request and ensures it doesn't do the
processing more often than kMinSavePeriodNs.

The new strategy avoids waking the thread unnecessary during extended
idle periods when we don't JIT.

Bug: 26815940

Change-Id: I24cb15daead5c5a5395ae6f5f79549e39e2f3011
ffc87076dda9878cb2cc098149bae441d38b9268 20-Apr-2016 Calin Juravle <calin@google.com> Split profile recording from jit compilation

We still use ProfileInfo objects to record profile information. That
gives us the flexibility to add the inline caches in the future and the
convenience of the already implemented GC.

If UseJIT is false and SaveProfilingInfo true, we will only record the
ProfileInfo and never launch compilation tasks.

Bug: 27916886

(cherry picked from commit e5de54cfab5f14ba0b8ff25d8d60901c7021943f)

Change-Id: I68afc181d71447895fb12346c1806e99bcab1de2
e5de54cfab5f14ba0b8ff25d8d60901c7021943f 20-Apr-2016 Calin Juravle <calin@google.com> Split profile recording from jit compilation

We still use ProfileInfo objects to record profile information. That
gives us the flexibility to add the inline caches in the future and the
convenience of the already implemented GC.

If UseJIT is false and SaveProfilingInfo true, we will only record the
ProfileInfo and never launch compilation tasks.

Bug: 27916886
Change-Id: I6e4768dc5d58f2f85f947b276b4244aa11ce3fca
20b7e3b4e801b06f0037651354f352523c93f5e3 18-Apr-2016 Calin Juravle <calin@google.com> Fix tracking foreign dex files

Apps which share the same VM will have different application data
directories. We used to store only the first one registered and miss
subsequent registrations.

Bug: 28012567

(cherry picked from commit 20ae79370a14c17dfb037914995d6430774fe492)

Change-Id: I2c19de1406b38a376995f1524014cb8a1daa9d82
698f4d1102e772a9dd1c4a224bff0f3eec03e6cb 30-Mar-2016 Calin Juravle <calin@google.com> Fix and tune ProfileSaver

- the statement to mark the profile saved was not guarded by the right
condition.
- increase the backoff to 2x and maximum period time to 10 minutes.

As part of this change also
- fix typos
- remove uneeded warning
- add more VLOGs for easier debuging in the future

Bug: 27914456

(cherry picked from commit 0cdaa6cdbeadceaee3a1acc641e7cc2548e125d9)

Change-Id: I76ddc6ced897bb91cfbd2a0cb6614bdeeafb9ee9
6726546bf3fd6bdb96a34197119d210bccda7e01 18-Mar-2016 Calin Juravle <calin@google.com> Improve ProfileSaver to cache data and do minimal I/O

This CLs introducing caching to further optimize the I/O performed by
the ProfileSaver. The cache stats are also recorded.

Resolved classes are captured and cached after 2 seconds but written
later during application lifetime.

Methods are also cached and the write got smarter to avoid
reading/writing them if it's not needed.

On non scientific experiments the size of the cache reaches just a few
hundreds uint16_t values kept in set, so its impact is minimal.

In terms of how much data we write. In the same non scientific
experiments this reduces the total bytes written by at least 2-3x. In
the first few minutes of after the boot gmscore writes ~3KB (down from
9kb) and quicksearchlauncher writes ~20KB (down from 40KB).

Bug: 27600652

(cherry picked from commit 85f7bf3bbfa17d65ff77e3e826b5f7aff45838a9)

Change-Id: I6ecb04ce81b281d1c1538060dbbaeeeb08906775
b9c1b9bdd7689c0e80c64c371581f99e53749e05 17-Mar-2016 Calin Juravle <calin@google.com> Improve resolved classes saving strategy

If we already have a non empty profile file it means that we already
saved once the resolved classes. So there's no need to hurry up and
start the profile saver eagerly after 2s.

Bug: 27600652

(cherry picked from commit c15e566b36170237f01ccefc12129c1578a02140)

Change-Id: Iecc730c25eab779efccbbde66432dbbc61192e8a
b8e69994d10534e0f4f96878725bc53e531f2c6f 09-Mar-2016 Calin Juravle <calin@google.com> Add ProfileSaver stats and dump them during SigQuit

Bug: 27516906

(cherry picked from commit c19c1c2e1def1f4f5ab5fd9e71b1a6f76d42988f)

Change-Id: I7d2b1091c3523805ef0f87df42feed1098678aad
20ae79370a14c17dfb037914995d6430774fe492 18-Apr-2016 Calin Juravle <calin@google.com> Fix tracking foreign dex files

Apps which share the same VM will have different application data
directories. We used to store only the first one registered and miss
subsequent registrations.

Bug: 28012567
Change-Id: I27c2aa2efa938b072be7c73bb778db82f80fcf1e
0cdaa6cdbeadceaee3a1acc641e7cc2548e125d9 30-Mar-2016 Calin Juravle <calin@google.com> Fix and tune ProfileSaver

- the statement to mark the profile saved was not guarded by the right
condition.
- increase the backoff to 2x and maximum period time to 10 minutes.

As part of this change also
- fix typos
- remove uneeded warning
- add more VLOGs for easier debuging in the future

Bug: 27914456

Change-Id: I877c3256aa96d727ac4f443dc6e1f2bdb33c56c6
85f7bf3bbfa17d65ff77e3e826b5f7aff45838a9 18-Mar-2016 Calin Juravle <calin@google.com> Improve ProfileSaver to cache data and do minimal I/O

This CLs introducing caching to further optimize the I/O performed by
the ProfileSaver. The cache stats are also recorded.

Resolved classes are captured and cached after 2 seconds but written
later during application lifetime.

Methods are also cached and the write got smarter to avoid
reading/writing them if it's not needed.

On non scientific experiments the size of the cache reaches just a few
hundreds uint16_t values kept in set, so its impact is minimal.

In terms of how much data we write. In the same non scientific
experiments this reduces the total bytes written by at least 2-3x. In
the first few minutes of after the boot gmscore writes ~3KB (down from
9kb) and quicksearchlauncher writes ~20KB (down from 40KB).

Bug: 27600652

Change-Id: I3a4e7051ccf04ac8fbd5896d328692db773e979d
c15e566b36170237f01ccefc12129c1578a02140 17-Mar-2016 Calin Juravle <calin@google.com> Improve resolved classes saving strategy

If we already have a non empty profile file it means that we already
saved once the resolved classes. So there's no need to hurry up and
start the profile saver eagerly after 2s.

Bug: 27600652
Change-Id: I92ac5869bf68c8d6cbac8fc1503fe3c4930241b4
c19c1c2e1def1f4f5ab5fd9e71b1a6f76d42988f 09-Mar-2016 Calin Juravle <calin@google.com> Add ProfileSaver stats and dump them during SigQuit

Bug: 27516906
Change-Id: I7d2b1091c3523805ef0f87df42feed1098678aad
c90bc92bc577020ff4d3caced4cee1cdf41fa5de 24-Feb-2016 Calin Juravle <calin@google.com> Record foreign dex files loaded by the app in the profile

A foreign dex file is a file which is not owned by the app
(it's not part of its code paths or its private data directory).

When such a dex file is loaded by the app, the runtime will record
a marker in a dedicated profile folder (foreing_dex_profile_path).
The marker is just a file named after the canonical location of the
dex file where '/' is replaced by '@'.

The markers will be used by the system server system server to
decide if the apk should be fully or profile guide compiled.

Bug: 27334750
Bug: 26080105

(cherry picked from commit 86a9ebe4197e963249ffbbaa1830da97ed642fa5)

Change-Id: I8be1fd4d854fa1e23c3c1054c9c083ad7b27317b
86a9ebe4197e963249ffbbaa1830da97ed642fa5 24-Feb-2016 Calin Juravle <calin@google.com> Record foreign dex files loaded by the app in the profile

A foreign dex file is a file which is not owned by the app
(it's not part of its code paths or its private data directory).

When such a dex file is loaded by the app, the runtime will record
a marker in a dedicated profile folder (foreing_dex_profile_path).
The marker is just a file named after the canonical location of the
dex file where '/' is replaced by '@'.

The markers will be used by the system server system server to
decide if the apk should be fully or profile guide compiled.

Bug: 27334750
Bug: 26080105
Change-Id: If4fa8208be4e2f6f0b748b8a5417c4ae9c2d5df6
c5dd319c574f67d11a71f1b60ac6c34bfe93b750 10-Dec-2015 Mathieu Chartier <mathieuc@google.com> Add and use loaded class profiling

Class profiling is a way to keep track of which classes are resolved.
From here the compiler can use this information to generate a smaller
app image.

TODO: Add tests for profile stuff.

Bug: 22858531

(cherry picked from commit 8913fc1a27df8cf3b37fd99e94d87f290591328e)

Change-Id: Ifcd09230cbdc266305bc1247e0d31e7920eb353e
8913fc1a27df8cf3b37fd99e94d87f290591328e 10-Dec-2015 Mathieu Chartier <mathieuc@google.com> Add and use loaded class profiling

Class profiling is a way to keep track of which classes are resolved.
From here the compiler can use this information to generate a smaller
app image.

TODO: Add tests for profile stuff.

Bug: 22858531

Change-Id: I91ccd686394cc2517512f66abb0e277f3d26d4da
b4eddd21c364c51b6fc5c439cda6958ae255dcd5 14-Jan-2016 Calin Juravle <calin@google.com> Add profile support for apps with shared runtime.

- extend ProfileSaver to track different dex locations to different
profile files.
- allow repeated calls to Runtime::RegisterAppInfo() which will
register a new pair <profile_file, locations_to_track> with the profile
saver.

Bug: 26080105
Change-Id: I58c4587d5f462c557411ad7126a00c29cd7db3a6
998c21661b5074c293cae818d0ab7c44dcda3a66 21-Dec-2015 Calin Juravle <calin@google.com> Perform profile file analysis in dex2oat

Dex2oat can accept now multiple profile files to drive a profile based
compilation. --profile-file and --reference-profile-file speficy a pair
of profile files which will be evaluated for significant differences
before starting the compilation. If the difference is insignificant
(according to some internal metric) the compilation is skipped and a
message is logged.

Multiple pairs of --profile-file and --reference-profile-file can be
specified. This effectively enables multi user support since profiles
for different users will be kept separately.

--reference-profile-file can be left out, case in which the decision is
solely based on --profile-file. If both flags are present, then their
repetition should form unique pairs.

If the compilation is performed and --reference-profile-file is given
then its data is merged with the data from the corresponding --profile-
file and saved back to the file.

If no profile flags are given, dex2oat proceeds as before and compiles
the dex files unconditionally.

As part of this change
- merge ProfileCompilationInfo and OfflineProfilingInfo under the same
object. There was no use to keep them separate anymore.
- SaveProfilingInfo now merges the data with what was in
the file before instead of overwriting it.

Bug: 26080105

Change-Id: Ia8c8b55587d468bca5179f78941854285426234d
4d77b6a511659f26fdc711e23825ffa6e7feed7a 01-Dec-2015 Calin Juravle <calin@google.com> Save profile information in a separate thread.

Previously we would save the profiling information only when the app
was sent to background. This missed on an important number of updates
on the jit code cache and it didn't work for background processes.

Bug: 26080105

Change-Id: I84075629870e69b3ed372f00f4806af1e9391e0f