mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 23:28:09 +00:00
f98a2138b7
When uploading CLs, the presubmit checks verify that the lines in the diff are formatted correctly according to `git cl format runtime`. However, when `buildtools/<os>-<arch>/clang/bin/clang-format` is updated, it does not force reformatting of files that would be reformatted. This leads to two issues: * Inconsistent style within the code base and within a single file. * Spurious reformatting in CLs when (1) clang-format is used on the whole file, or (2) the diff lines overlap. `clang-format` doesn't change that frequently, so in general this is not a large issue, but I've seen a bit too many "spurious formatting, please revert" comments on CLs recently. This CL formats the runtime to be in line with the current pinned `clang-format`: ``` $ find runtime/ -iname *.h -o -iname *.cc | xargs buildtools/mac-arm64/clang/bin/clang-format -i ``` `git cl format` (which only formats changed lines, and does so with `clang-format`) seems to not agree with itself, or clang-format, or cpplint in a handful of places. This CL adds `// clang-format off` for these. (See previous patchsets for the specific instances.) TEST=A variety of bots including GCC, MacOS and Windows. Change-Id: I470892e898971899fda14bb3b8f2c8efefd67686 Cq-Include-Trybots: luci.dart.try:vm-gcc-linux-try,vm-ffi-qemu-linux-release-riscv64-try,vm-ffi-qemu-linux-release-arm-try,vm-aot-win-debug-x64-try,vm-win-debug-x64c-try,vm-mac-debug-x64-try,vm-mac-debug-arm64-try,vm-aot-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/362780 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
125 lines
5.1 KiB
C++
125 lines
5.1 KiB
C++
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "vm/globals.h"
|
|
#if defined(DART_HOST_OS_FUCHSIA) && defined(SUPPORT_TIMELINE)
|
|
#include <lib/trace-engine/context.h>
|
|
#include <lib/trace-engine/instrumentation.h>
|
|
#include <zircon/syscalls.h>
|
|
|
|
#include "platform/utils.h"
|
|
#include "vm/object.h"
|
|
#include "vm/timeline.h"
|
|
|
|
namespace dart {
|
|
|
|
void TimelineEventFuchsiaRecorder::OnEvent(TimelineEvent* event) {
|
|
if (event == nullptr) {
|
|
return;
|
|
}
|
|
TimelineStream* stream = event->stream_;
|
|
trace_string_ref_t category;
|
|
trace_context_t* context = trace_acquire_context_for_category_cached(
|
|
stream->fuchsia_name(), stream->trace_site(), &category);
|
|
if (context == nullptr) {
|
|
return;
|
|
}
|
|
|
|
trace_string_ref_t name;
|
|
if (event->owns_label()) {
|
|
// If the event owns the name, then the name will be deallocated, so
|
|
// instruct the system trace to make a copy.
|
|
name = trace_context_make_registered_string_copy(context, event->label(),
|
|
strlen(event->label()));
|
|
} else {
|
|
// If the event doesn't own the name, then it is a string literal, and
|
|
// the system trace can use the pointer and not a copy.
|
|
name =
|
|
trace_context_make_registered_string_literal(context, event->label());
|
|
}
|
|
|
|
trace_thread_ref_t thread;
|
|
trace_context_register_current_thread(context, &thread);
|
|
|
|
trace_arg_t args[TRACE_MAX_ARGS];
|
|
const intptr_t num_args = Utils::Minimum(
|
|
event->arguments_length(), static_cast<intptr_t>(TRACE_MAX_ARGS));
|
|
|
|
for (intptr_t i = 0; i < num_args; i++) {
|
|
const char* name = event->arguments()[i].name;
|
|
const char* value = event->arguments()[i].value;
|
|
trace_string_ref_t arg_name =
|
|
trace_context_make_registered_string_literal(context, name);
|
|
trace_string_ref_t arg_value =
|
|
trace_make_inline_string_ref(value, strlen(value));
|
|
args[i] = trace_make_arg(arg_name, trace_make_string_arg_value(arg_value));
|
|
}
|
|
|
|
const uint64_t time_scale = zx_ticks_per_second() / kMicrosecondsPerSecond;
|
|
const uint64_t start_time = event->LowTime() * time_scale;
|
|
const uint64_t end_time = event->HighTime() * time_scale;
|
|
|
|
// TODO(zra): The functions below emit Dart's timeline events all as category
|
|
// "dart". Instead, we could have finer-grained categories that make use of
|
|
// the name of the timeline stream, e.g. "VM", "GC", etc.
|
|
switch (event->event_type()) {
|
|
case TimelineEvent::kBegin:
|
|
trace_context_write_duration_begin_event_record(
|
|
context, start_time, &thread, &category, &name, args, num_args);
|
|
break;
|
|
case TimelineEvent::kEnd:
|
|
trace_context_write_duration_end_event_record(
|
|
context, start_time, &thread, &category, &name, args, num_args);
|
|
break;
|
|
case TimelineEvent::kInstant:
|
|
trace_context_write_instant_event_record(
|
|
context, start_time, &thread, &category, &name, TRACE_SCOPE_THREAD,
|
|
args, num_args);
|
|
break;
|
|
case TimelineEvent::kAsyncBegin:
|
|
trace_context_write_async_begin_event_record(context, start_time, &thread,
|
|
&category, &name,
|
|
event->Id(), args, num_args);
|
|
break;
|
|
case TimelineEvent::kAsyncEnd:
|
|
trace_context_write_async_end_event_record(context, end_time, &thread,
|
|
&category, &name, event->Id(),
|
|
args, num_args);
|
|
break;
|
|
case TimelineEvent::kAsyncInstant:
|
|
trace_context_write_async_instant_event_record(
|
|
context, start_time, &thread, &category, &name, event->Id(), args,
|
|
num_args);
|
|
break;
|
|
case TimelineEvent::kDuration:
|
|
trace_context_write_duration_event_record(context, start_time, end_time,
|
|
&thread, &category, &name, args,
|
|
num_args);
|
|
break;
|
|
case TimelineEvent::kFlowBegin:
|
|
trace_context_write_flow_begin_event_record(context, start_time, &thread,
|
|
&category, &name, event->Id(),
|
|
args, num_args);
|
|
break;
|
|
case TimelineEvent::kFlowStep:
|
|
trace_context_write_flow_step_event_record(context, start_time, &thread,
|
|
&category, &name, event->Id(),
|
|
args, num_args);
|
|
break;
|
|
case TimelineEvent::kFlowEnd:
|
|
trace_context_write_flow_end_event_record(context, start_time, &thread,
|
|
&category, &name, event->Id(),
|
|
args, num_args);
|
|
break;
|
|
default:
|
|
// TODO(zra): Figure out what to do with kCounter and kMetadata.
|
|
break;
|
|
}
|
|
trace_release_context(context);
|
|
}
|
|
|
|
} // namespace dart
|
|
|
|
#endif // defined(DART_HOST_OS_FUCHSIA) && defined(SUPPORT_TIMELINE)
|