summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mythri Alle <mythria@google.com> 2025-03-18 11:33:29 -0700
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2025-03-18 11:33:29 -0700
commit97d70d9e2470a59e9e772499693fa5cc807b716d (patch)
tree0834559baf992b782d8a101359be43232a644e2b
parentdc6a1fd03b22ebae58f1c8c4052533078e3cdcdd (diff)
parent6ef56e97fa64c47fbd09eed1857f74edca18b2b6 (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.cc12
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,