diff options
| author | 2025-03-18 11:33:29 -0700 | |
|---|---|---|
| committer | 2025-03-18 11:33:29 -0700 | |
| commit | 97d70d9e2470a59e9e772499693fa5cc807b716d (patch) | |
| tree | 0834559baf992b782d8a101359be43232a644e2b | |
| parent | dc6a1fd03b22ebae58f1c8c4052533078e3cdcdd (diff) | |
| parent | 6ef56e97fa64c47fbd09eed1857f74edca18b2b6 (diff) | |
Fix iterating over long running method buffers when flushing am: 75cfb5844d am: 6ef56e97fa
Original change: https://android-review.googlesource.com/c/platform/art/+/3547504
Change-Id: Ia9c595d30f4c6b5ea15410514d242e946d259b8c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | runtime/trace_profile.cc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/runtime/trace_profile.cc b/runtime/trace_profile.cc index 6039cd999e..6eff2cdfe1 100644 --- a/runtime/trace_profile.cc +++ b/runtime/trace_profile.cc @@ -514,9 +514,9 @@ size_t TraceProfiler::DumpLongRunningMethodBuffer(uint32_t thread_id, int num_records = 0; uintptr_t prev_time_action_encoding = 0; uintptr_t prev_method_ptr = 0; - size_t end_index = end_trace_entries - method_trace_entries; - for (size_t i = kAlwaysOnTraceBufSize - 1; i >= end_index;) { - uintptr_t event = method_trace_entries[i--]; + int64_t end_index = end_trace_entries - method_trace_entries; + for (int64_t i = kAlwaysOnTraceBufSize; i > end_index;) { + uintptr_t event = method_trace_entries[--i]; if (event == 0x1) { // This is a placeholder event. Ignore this event. continue; @@ -531,7 +531,7 @@ size_t TraceProfiler::DumpLongRunningMethodBuffer(uint32_t thread_id, } else { // method entry method_ptr = event; - event_time = TimestampCounter::GetNanoTime(method_trace_entries[i--] & ~0x1); + event_time = TimestampCounter::GetNanoTime(method_trace_entries[--i] & ~0x1); } uint64_t time_action_encoding = event_time << 1; @@ -590,7 +590,7 @@ void TraceProfiler::FlushBufferAndRecordTraceEvent(ArtMethod* method, size_t num_occupied_entries = (processed_events_ptr - *method_trace_curr_ptr); size_t index = kAlwaysOnTraceBufSize; - std::unique_ptr<uint8_t> buffer_ptr(new uint8_t[kBufSizeForEncodedData]); + std::unique_ptr<uint8_t[]> buffer_ptr(new uint8_t[kBufSizeForEncodedData]); size_t num_bytes; if (num_occupied_entries > kMaxEntriesAfterFlush) { // If we don't have sufficient space just record a placeholder exit and flush all the existing @@ -659,7 +659,7 @@ void TraceDumpCheckpoint::Run(Thread* thread) { std::unordered_set<ArtMethod*> traced_methods; if (trace_data_->GetTraceType() == LowOverheadTraceType::kLongRunningMethods) { uintptr_t* method_trace_curr_ptr = *(thread->GetTraceBufferCurrEntryPtr()); - std::unique_ptr<uint8_t> buffer_ptr(new uint8_t[kBufSizeForEncodedData]); + std::unique_ptr<uint8_t[]> buffer_ptr(new uint8_t[kBufSizeForEncodedData]); size_t num_bytes = TraceProfiler::DumpLongRunningMethodBuffer(thread->GetTid(), method_trace_entries, method_trace_curr_ptr, |