Add API to ART/Perfetto Java Heap Profiler (reland)

Add Perfetto API calls to ART Sampling Java Heap Profiler.

Test: Passing Tests
Local Testing
Bug: 160214819

Test: art/tools/run-gtests.sh
  in ART chroot built on master-art (silvermont target)
Test: art/test/testrunner/testrunner.py --target --optimizing
  in ART chroot built on master-art (silvermont target)
Test: art/tools/run-libcore-tests.sh --mode=device
  in ART chroot built on master-art (silvermont target)
Test: m test-art-host-gtest
  on master-art
Test: art/tools/buildbot-build.sh --host && \
        art/test/testrunner/testrunner.py --host --64 --optimizing
  on master-art
Bug: 179915934

This reverts commit 2291439187b06d995bb298683246416c75d92740

Change-Id: I600313b9515a2a3ff64361d7307b88d9a76c07e4
diff --git a/runtime/javaheapprof/javaheapsampler.h b/runtime/javaheapprof/javaheapsampler.h
index 02cb7b7..618893c 100644
--- a/runtime/javaheapprof/javaheapsampler.h
+++ b/runtime/javaheapprof/javaheapsampler.h
@@ -42,6 +42,15 @@
     thread_local size_t bytes_until_sample = 0;
     return &bytes_until_sample;
   }
+  void SetHeapID(uint32_t heap_id) {
+    perfetto_heap_id_ = heap_id;
+  }
+  void EnableHeapSampler() {
+    enabled_.store(true, std::memory_order_release);
+  }
+  void DisableHeapSampler() {
+    enabled_.store(false, std::memory_order_release);
+  }
   // Report a sample to Perfetto.
   void ReportSample(art::mirror::Object* obj, size_t allocation_size);
   // Check whether we should take a sample or not at this allocation, and return the
@@ -60,16 +69,10 @@
   void AdjustSampleOffset(size_t adjustment);
   // Is heap sampler enabled?
   bool IsEnabled();
-  void EnableHeapSampler(void* enable_ptr, const void* enable_info_ptr);
-  void DisableHeapSampler(void* disable_ptr, const void* disable_info_ptr);
   // Set the sampling interval.
-  void SetSamplingInterval(int sampling_interval) REQUIRES(geo_dist_rng_lock_);
+  void SetSamplingInterval(int sampling_interval) REQUIRES(!geo_dist_rng_lock_);
   // Return the sampling interval.
   int GetSamplingInterval();
-  // Set the Perfetto Session Info.
-  void SetSessionInfo(void* info);
-  // Get the Perfetto Session Info.
-  void* GetSessionInfo();
 
  private:
   size_t NextGeoDistRandSample() REQUIRES(!geo_dist_rng_lock_);
@@ -81,7 +84,6 @@
   // Default sampling interval is 4kb.
   // Writes guarded by geo_dist_rng_lock_.
   std::atomic<int> p_sampling_interval_{4 * 1024};
-  void* perfetto_session_info_;
   uint32_t perfetto_heap_id_ = 0;
   // std random number generator.
   std::minstd_rand rng_ GUARDED_BY(geo_dist_rng_lock_);  // Holds the state