|  | // Copyright 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef BASE_ANDROID_ORDERFILE_ORDERFILE_INSTRUMENTATION_H_ | 
|  | #define BASE_ANDROID_ORDERFILE_ORDERFILE_INSTRUMENTATION_H_ | 
|  |  | 
|  | #include <cstdint> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/android/orderfile/orderfile_buildflags.h" | 
|  |  | 
|  | namespace base { | 
|  | namespace android { | 
|  | namespace orderfile { | 
|  | #if BUILDFLAG(DEVTOOLS_INSTRUMENTATION_DUMPING) | 
|  | constexpr int kPhases = 2; | 
|  | #else | 
|  | constexpr int kPhases = 1; | 
|  | #endif  // BUILDFLAG(DEVTOOLS_INSTRUMENTATION_DUMPING) | 
|  |  | 
|  | constexpr size_t kStartOfTextForTesting = 1000; | 
|  | constexpr size_t kEndOfTextForTesting = kStartOfTextForTesting + 1000 * 1000; | 
|  |  | 
|  | // Stop recording. Returns false if recording was already disabled. | 
|  | bool Disable(); | 
|  |  | 
|  | // CHECK()s that the offsets are correctly set up. | 
|  | void SanityChecks(); | 
|  |  | 
|  | // Switches to the next recording phase. If called from the last phase, dumps | 
|  | // the data to disk, and returns |true|. |pid| is the current process pid, and | 
|  | // |start_ns_since_epoch| the process start timestamp. | 
|  | bool SwitchToNextPhaseOrDump(int pid, uint64_t start_ns_since_epoch); | 
|  |  | 
|  | // Starts a thread to dump instrumentation after a delay. | 
|  | void StartDelayedDump(); | 
|  |  | 
|  | // Dumps all information for the current process, annotating the dump file name | 
|  | // with the given tag. Will disable instrumentation. Instrumentation must be | 
|  | // disabled before this is called. | 
|  | void Dump(const std::string& tag); | 
|  |  | 
|  | // Record an |address|, if recording is enabled. Only for testing. | 
|  | void RecordAddressForTesting(size_t address); | 
|  |  | 
|  | // Resets the state. Only for testing. | 
|  | void ResetForTesting(); | 
|  |  | 
|  | // Returns an ordered list of reached offsets. Only for testing. | 
|  | std::vector<size_t> GetOrderedOffsetsForTesting(); | 
|  | }  // namespace orderfile | 
|  | }  // namespace android | 
|  | }  // namespace base | 
|  |  | 
|  | #endif  // BASE_ANDROID_ORDERFILE_ORDERFILE_INSTRUMENTATION_H_ |