Merge "perfetto-ui: Make annotation slice selectable"
diff --git a/Android.bp b/Android.bp
index d3b7f3f..4ef5602 100644
--- a/Android.bp
+++ b/Android.bp
@@ -34,6 +34,7 @@
"src/trace_processor/metrics/android/android_task_names.sql",
"src/trace_processor/metrics/android/android_task_state.sql",
"src/trace_processor/metrics/android/android_thread_time_in_state.sql",
+ "src/trace_processor/metrics/android/counter_span_view.sql",
"src/trace_processor/metrics/android/cpu_info.sql",
"src/trace_processor/metrics/android/display_metrics.sql",
"src/trace_processor/metrics/android/heap_profile_callsites.sql",
@@ -41,6 +42,7 @@
"src/trace_processor/metrics/android/java_heap_histogram.sql",
"src/trace_processor/metrics/android/java_heap_stats.sql",
"src/trace_processor/metrics/android/mem_stats_priority_breakdown.sql",
+ "src/trace_processor/metrics/android/process_counter_span_view.sql",
"src/trace_processor/metrics/android/process_mem.sql",
"src/trace_processor/metrics/android/process_metadata.sql",
"src/trace_processor/metrics/android/process_oom_score.sql",
@@ -48,7 +50,6 @@
"src/trace_processor/metrics/android/span_view_stats.sql",
"src/trace_processor/metrics/android/unmapped_java_symbols.sql",
"src/trace_processor/metrics/android/unsymbolized_frames.sql",
- "src/trace_processor/metrics/android/upid_span_view.sql",
"src/trace_processor/metrics/chrome/chrome_processes.sql",
"src/trace_processor/metrics/trace_metadata.sql",
],
diff --git a/BUILD b/BUILD
index e32422d..9b74aff 100644
--- a/BUILD
+++ b/BUILD
@@ -755,6 +755,7 @@
"src/trace_processor/metrics/android/android_task_names.sql",
"src/trace_processor/metrics/android/android_task_state.sql",
"src/trace_processor/metrics/android/android_thread_time_in_state.sql",
+ "src/trace_processor/metrics/android/counter_span_view.sql",
"src/trace_processor/metrics/android/cpu_info.sql",
"src/trace_processor/metrics/android/display_metrics.sql",
"src/trace_processor/metrics/android/heap_profile_callsites.sql",
@@ -762,6 +763,7 @@
"src/trace_processor/metrics/android/java_heap_histogram.sql",
"src/trace_processor/metrics/android/java_heap_stats.sql",
"src/trace_processor/metrics/android/mem_stats_priority_breakdown.sql",
+ "src/trace_processor/metrics/android/process_counter_span_view.sql",
"src/trace_processor/metrics/android/process_mem.sql",
"src/trace_processor/metrics/android/process_metadata.sql",
"src/trace_processor/metrics/android/process_oom_score.sql",
@@ -769,7 +771,6 @@
"src/trace_processor/metrics/android/span_view_stats.sql",
"src/trace_processor/metrics/android/unmapped_java_symbols.sql",
"src/trace_processor/metrics/android/unsymbolized_frames.sql",
- "src/trace_processor/metrics/android/upid_span_view.sql",
"src/trace_processor/metrics/chrome/chrome_processes.sql",
"src/trace_processor/metrics/trace_metadata.sql",
],
diff --git a/OWNERS b/OWNERS
index 3e319bc..b61ef9c 100644
--- a/OWNERS
+++ b/OWNERS
@@ -13,6 +13,7 @@
nuskos@google.com
khokhlov@google.com
ssid@google.com
+ddrone@google.com
# chromium.org aliases for DEPS on third_party/perfetto.
eseckler@chromium.org
diff --git a/bazel/proto_gen.bzl b/bazel/proto_gen.bzl
index 14e7e75..50f5747 100644
--- a/bazel/proto_gen.bzl
+++ b/bazel/proto_gen.bzl
@@ -82,14 +82,17 @@
executable = ctx.executable.protoc,
arguments = arguments,
)
+ cc_files = depset([f for f in out_files if f.path.endswith(".cc")])
+ h_files = depset([f for f in out_files if f.path.endswith(".h")])
return [
- DefaultInfo(files = depset(out_files)),
+ DefaultInfo(files = cc_files),
OutputGroupInfo(
- cc = depset([f for f in out_files if f.path.endswith(".cc")]),
- h = depset([f for f in out_files if f.path.endswith(".h")]),
+ cc = cc_files,
+ h = h_files,
),
]
+
proto_gen = rule(
attrs = {
"deps": attr.label_list(
diff --git a/bazel/rules.bzl b/bazel/rules.bzl
index 65ff4b0..af272f5 100644
--- a/bazel/rules.bzl
+++ b/bazel/rules.bzl
@@ -197,10 +197,13 @@
output_group = "h",
)
+ # The headers from the gen plugin have implicit dependencies
+ # on each other so will fail when compiled independently. Use
+ # textual_hdrs to indicate this to Bazel.
perfetto_cc_library(
name = name,
srcs = [":" + name + "_gen"],
- hdrs = [":" + name + "_gen_h"],
+ textual_hdrs = [":" + name + "_gen_h"],
deps = [
PERFETTO_CONFIG.root + ":libprotozero"
] + _cc_deps,
diff --git a/include/perfetto/tracing/internal/track_event_data_source.h b/include/perfetto/tracing/internal/track_event_data_source.h
index f737054..e63f114 100644
--- a/include/perfetto/tracing/internal/track_event_data_source.h
+++ b/include/perfetto/tracing/internal/track_event_data_source.h
@@ -150,6 +150,7 @@
// - Two debug annotations
// - Track
// - Track + Lambda
+ // - Track + timestamp
// - Track + Lambda + timestamp
// - Track + one debug annotation
// - Track + two debug annotations
@@ -238,6 +239,22 @@
TrackEventInternal::GetTimeNs(), std::move(arg_function));
}
+ // Trace point with a track and overridden timestamp.
+ template <size_t CategoryIndex,
+ typename CategoryType,
+ typename TrackType,
+ typename TrackTypeCheck = typename std::enable_if<
+ std::is_convertible<TrackType, Track>::value>::type>
+ static void TraceForCategory(uint32_t instances,
+ const CategoryType& dynamic_category,
+ const char* event_name,
+ perfetto::protos::pbzero::TrackEvent::Type type,
+ const TrackType& track,
+ uint64_t timestamp) PERFETTO_NO_INLINE {
+ TraceForCategoryImpl<CategoryIndex>(instances, dynamic_category, event_name,
+ type, track, timestamp);
+ }
+
// Trace point with a track, a lambda function and an overridden timestamp.
// |timestamp| must be in nanoseconds in the trace clock timebase.
template <size_t CategoryIndex,
diff --git a/src/trace_processor/metrics/BUILD.gn b/src/trace_processor/metrics/BUILD.gn
index 01649da..28a121e 100644
--- a/src/trace_processor/metrics/BUILD.gn
+++ b/src/trace_processor/metrics/BUILD.gn
@@ -45,7 +45,8 @@
"android/process_oom_score.sql",
"android/mem_stats_priority_breakdown.sql",
"android/span_view_stats.sql",
- "android/upid_span_view.sql",
+ "android/process_counter_span_view.sql",
+ "android/counter_span_view.sql",
"android/unmapped_java_symbols.sql",
"android/unsymbolized_frames.sql",
"chrome/chrome_processes.sql",
diff --git a/src/trace_processor/metrics/android/android_batt.sql b/src/trace_processor/metrics/android/android_batt.sql
index 94c92a6..e44bec3 100644
--- a/src/trace_processor/metrics/android/android_batt.sql
+++ b/src/trace_processor/metrics/android/android_batt.sql
@@ -52,7 +52,7 @@
) USING(ts)
ORDER BY ts;
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/counter_span_view.sql',
'table_name', 'screen_state',
'counter_name', 'ScreenState');
diff --git a/src/trace_processor/metrics/android/counter_span_view.sql b/src/trace_processor/metrics/android/counter_span_view.sql
new file mode 100644
index 0000000..cdd953a
--- /dev/null
+++ b/src/trace_processor/metrics/android/counter_span_view.sql
@@ -0,0 +1,25 @@
+--
+-- Copyright 2020 The Android Open Source Project
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- https://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+CREATE VIEW IF NOT EXISTS {{table_name}}_span AS
+SELECT
+ ts,
+ LEAD(ts, 1, (SELECT end_ts + 1 FROM trace_bounds))
+ OVER(PARTITION BY track_id ORDER BY ts) - ts AS dur,
+ value AS {{table_name}}_val
+FROM counter c JOIN counter_track t
+ ON t.id = c.track_id
+WHERE name = '{{counter_name}}';
diff --git a/src/trace_processor/metrics/android/upid_span_view.sql b/src/trace_processor/metrics/android/process_counter_span_view.sql
similarity index 92%
rename from src/trace_processor/metrics/android/upid_span_view.sql
rename to src/trace_processor/metrics/android/process_counter_span_view.sql
index 471e71e..2853f62 100644
--- a/src/trace_processor/metrics/android/upid_span_view.sql
+++ b/src/trace_processor/metrics/android/process_counter_span_view.sql
@@ -14,9 +14,7 @@
-- limitations under the License.
--
-DROP VIEW IF EXISTS {{table_name}}_span;
-
-CREATE VIEW {{table_name}}_span AS
+CREATE VIEW IF NOT EXISTS {{table_name}}_span AS
SELECT
ts,
LEAD(ts, 1, (
diff --git a/src/trace_processor/metrics/android/process_mem.sql b/src/trace_processor/metrics/android/process_mem.sql
index fa07a9d..a51a78a 100644
--- a/src/trace_processor/metrics/android/process_mem.sql
+++ b/src/trace_processor/metrics/android/process_mem.sql
@@ -16,21 +16,21 @@
-- Create all the views used to generate the Android Memory metrics proto.
-- Anon RSS
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
'table_name', 'anon_rss',
'counter_name', 'mem.rss.anon');
-- File RSS
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
'table_name', 'file_rss',
'counter_name', 'mem.rss.file');
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
'table_name', 'shmem_rss',
'counter_name', 'mem.rss.shmem');
-- Swap
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
'table_name', 'swap',
'counter_name', 'mem.swap');
@@ -80,7 +80,7 @@
FROM rss_and_swap_join;
-- If we have dalvik events enabled (for ART trace points) we can construct the java heap timeline.
-SELECT RUN_METRIC('android/upid_span_view.sql',
+SELECT RUN_METRIC('android/process_counter_span_view.sql',
'table_name', 'java_heap_kb',
'counter_name', 'Heap size (KB)');
diff --git a/src/tracing/test/api_integrationtest.cc b/src/tracing/test/api_integrationtest.cc
index 1d48dd5..d44489a 100644
--- a/src/tracing/test/api_integrationtest.cc
+++ b/src/tracing/test/api_integrationtest.cc
@@ -1307,6 +1307,46 @@
perfetto::TrackEvent::EraseTrackDescriptor(track);
}
+TEST_F(PerfettoApiTest, TrackEventCustomTrackAndTimestampNoLambda) {
+ auto* tracing_session = NewTraceWithCategories({"bar"});
+ tracing_session->get()->StartBlocking();
+
+ perfetto::Track track(789);
+
+ constexpr uint64_t kBeginEventTime = 10;
+ constexpr uint64_t kEndEventTime = 15;
+ TRACE_EVENT_BEGIN("bar", "Event", track, kBeginEventTime);
+ TRACE_EVENT_END("bar", track, kEndEventTime);
+
+ perfetto::TrackEvent::Flush();
+ tracing_session->get()->StopBlocking();
+
+ std::vector<char> raw_trace = tracing_session->get()->ReadTraceBlocking();
+ perfetto::protos::gen::Trace trace;
+ ASSERT_TRUE(trace.ParseFromArray(raw_trace.data(), raw_trace.size()));
+
+ int event_count = 0;
+ for (const auto& packet : trace.packet()) {
+ if (!packet.has_track_event())
+ continue;
+ event_count++;
+ switch (packet.track_event().type()) {
+ case perfetto::protos::gen::TrackEvent::TYPE_SLICE_BEGIN:
+ EXPECT_EQ(packet.timestamp(), kBeginEventTime);
+ break;
+ case perfetto::protos::gen::TrackEvent::TYPE_SLICE_END:
+ EXPECT_EQ(packet.timestamp(), kEndEventTime);
+ break;
+ case perfetto::protos::gen::TrackEvent::TYPE_INSTANT:
+ case perfetto::protos::gen::TrackEvent::TYPE_COUNTER:
+ case perfetto::protos::gen::TrackEvent::TYPE_UNSPECIFIED:
+ ADD_FAILURE();
+ }
+ }
+
+ EXPECT_EQ(event_count, 2);
+}
+
TEST_F(PerfettoApiTest, TrackEventAnonymousCustomTrack) {
// Create a new trace session.
auto* tracing_session = NewTraceWithCategories({"bar"});
diff --git a/tools/trace_processor b/tools/trace_processor
index 6476d14..b79af18 100755
--- a/tools/trace_processor
+++ b/tools/trace_processor
@@ -31,8 +31,8 @@
import urllib
TRACE_PROCESSOR_SHELL_SHAS = {
- 'linux': '7532ce79b260993018fdd515fdf99d3151ce48d4',
- 'mac': 'ed29b0eefe4f209504c18400b844cb00b4bc323b',
+ 'linux': '3a28532ba5cb1b94cea8a563bbfa7d16175f208d',
+ 'mac': '637fe7ac61f1700edd2fbaa76e0775ea97f4c394',
}
TRACE_PROCESSOR_SHELL_PATH = tempfile.gettempdir()
TRACE_PROCESSOR_SHELL_BASE_URL = ('https://storage.googleapis.com/perfetto/')
diff --git a/tools/traceconv b/tools/traceconv
index 6adbade..964cca3 100755
--- a/tools/traceconv
+++ b/tools/traceconv
@@ -33,8 +33,8 @@
# Keep this in sync with the SHAs in catapult file
# systrace/systrace/tracing_agents/atrace_from_file_agent.py.
TRACE_TO_TEXT_SHAS = {
- 'linux': '33d496605b3c861f98e8467ad5a5d974aa0720ea',
- 'mac': 'ecc0f5862fcde5e458d6edf3f3d1b03b609db091',
+ 'linux': '2f4ee64e3f2135f698ee665d91c489e129fe7859',
+ 'mac': 'd000e01827c439357a4d6e6c5b1076357e561a26',
}
TRACE_TO_TEXT_PATH = tempfile.gettempdir()
TRACE_TO_TEXT_BASE_URL = ('https://storage.googleapis.com/perfetto/')