Merge "tp: optimize SelectBvWithIv function in RowMap"
diff --git a/Android.bp b/Android.bp
index a7c4677..3e771c0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3692,6 +3692,7 @@
srcs: [
"protos/perfetto/metrics/android/android_trusty_workqueues.proto",
"protos/perfetto/metrics/android/batt_metric.proto",
+ "protos/perfetto/metrics/android/binder_metric.proto",
"protos/perfetto/metrics/android/camera_metric.proto",
"protos/perfetto/metrics/android/camera_unagg_metric.proto",
"protos/perfetto/metrics/android/cpu_metric.proto",
@@ -3760,6 +3761,7 @@
srcs: [
"protos/perfetto/metrics/android/android_trusty_workqueues.proto",
"protos/perfetto/metrics/android/batt_metric.proto",
+ "protos/perfetto/metrics/android/binder_metric.proto",
"protos/perfetto/metrics/android/camera_metric.proto",
"protos/perfetto/metrics/android/camera_unagg_metric.proto",
"protos/perfetto/metrics/android/cpu_metric.proto",
@@ -8386,6 +8388,7 @@
name: "perfetto_src_trace_processor_metrics_sql_gen_amalgamated_sql_metrics",
srcs: [
"src/trace_processor/metrics/sql/android/android_batt.sql",
+ "src/trace_processor/metrics/sql/android/android_binder.sql",
"src/trace_processor/metrics/sql/android/android_camera.sql",
"src/trace_processor/metrics/sql/android/android_camera_unagg.sql",
"src/trace_processor/metrics/sql/android/android_cpu.sql",
diff --git a/BUILD b/BUILD
index d9cfb6b..fa04d14 100644
--- a/BUILD
+++ b/BUILD
@@ -1052,6 +1052,7 @@
name = "src_trace_processor_metrics_sql_gen_amalgamated_sql_metrics",
srcs = [
"src/trace_processor/metrics/sql/android/android_batt.sql",
+ "src/trace_processor/metrics/sql/android/android_binder.sql",
"src/trace_processor/metrics/sql/android/android_camera.sql",
"src/trace_processor/metrics/sql/android/android_camera_unagg.sql",
"src/trace_processor/metrics/sql/android/android_cpu.sql",
@@ -2784,6 +2785,7 @@
srcs = [
"protos/perfetto/metrics/android/android_trusty_workqueues.proto",
"protos/perfetto/metrics/android/batt_metric.proto",
+ "protos/perfetto/metrics/android/binder_metric.proto",
"protos/perfetto/metrics/android/camera_metric.proto",
"protos/perfetto/metrics/android/camera_unagg_metric.proto",
"protos/perfetto/metrics/android/cpu_metric.proto",
diff --git a/protos/perfetto/config/perfetto_config.proto b/protos/perfetto/config/perfetto_config.proto
index cbcc81e..e36eb7c 100644
--- a/protos/perfetto/config/perfetto_config.proto
+++ b/protos/perfetto/config/perfetto_config.proto
@@ -659,12 +659,11 @@
// multiple.
optional uint32 proc_stats_cache_ttl_ms = 6;
- // Whether to record /proc/tid/time_in_state.
- optional bool record_thread_time_in_state = 7;
+ // DEPRECATED record_thread_time_in_state
+ reserved 7;
- // Size of the cache for thread time_in_state cpu freq values.
- // If not specificed, the default is used.
- optional uint32 thread_time_in_state_cache_size = 8;
+ // DEPRECATED thread_time_in_state_cache_size
+ reserved 8;
}
// End of protos/perfetto/config/process_stats/process_stats_config.proto
diff --git a/protos/perfetto/config/process_stats/process_stats_config.proto b/protos/perfetto/config/process_stats/process_stats_config.proto
index cc7e4d4..4a0848d 100644
--- a/protos/perfetto/config/process_stats/process_stats_config.proto
+++ b/protos/perfetto/config/process_stats/process_stats_config.proto
@@ -57,10 +57,9 @@
// multiple.
optional uint32 proc_stats_cache_ttl_ms = 6;
- // Whether to record /proc/tid/time_in_state.
- optional bool record_thread_time_in_state = 7;
+ // DEPRECATED record_thread_time_in_state
+ reserved 7;
- // Size of the cache for thread time_in_state cpu freq values.
- // If not specificed, the default is used.
- optional uint32 thread_time_in_state_cache_size = 8;
+ // DEPRECATED thread_time_in_state_cache_size
+ reserved 8;
}
diff --git a/protos/perfetto/metrics/android/BUILD.gn b/protos/perfetto/metrics/android/BUILD.gn
index c32d093..8091fb7 100644
--- a/protos/perfetto/metrics/android/BUILD.gn
+++ b/protos/perfetto/metrics/android/BUILD.gn
@@ -22,6 +22,7 @@
sources = [
"android_trusty_workqueues.proto",
"batt_metric.proto",
+ "binder_metric.proto",
"camera_metric.proto",
"camera_unagg_metric.proto",
"cpu_metric.proto",
diff --git a/protos/perfetto/metrics/android/binder_metric.proto b/protos/perfetto/metrics/android/binder_metric.proto
new file mode 100644
index 0000000..f60d022
--- /dev/null
+++ b/protos/perfetto/metrics/android/binder_metric.proto
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2022 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
+ *
+ * http://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.
+ */
+
+syntax = "proto2";
+
+package perfetto.protos;
+
+// This metric provides per-process Binder statistics for traces with binder_driver enabled
+// Specifically, transactions are categorized and counted
+message AndroidBinderMetric {
+ message PerProcessBreakdown {
+ optional string process_name = 1;
+ optional uint32 pid = 2;
+ optional string slice_name = 3;
+ optional uint32 count = 4;
+ }
+
+ repeated PerProcessBreakdown process_breakdown = 1;
+}
\ No newline at end of file
diff --git a/protos/perfetto/metrics/metrics.proto b/protos/perfetto/metrics/metrics.proto
index 8d521cc..55571c4 100644
--- a/protos/perfetto/metrics/metrics.proto
+++ b/protos/perfetto/metrics/metrics.proto
@@ -54,6 +54,7 @@
import "protos/perfetto/metrics/android/trace_quality.proto";
import "protos/perfetto/metrics/android/android_trusty_workqueues.proto";
import "protos/perfetto/metrics/android/unsymbolized_frames.proto";
+import "protos/perfetto/metrics/android/binder_metric.proto";
// Trace processor metadata
message TraceMetadata {
@@ -99,7 +100,7 @@
// Root message for all Perfetto-based metrics.
//
-// Next id: 46
+// Next id: 47
message TraceMetrics {
reserved 4, 10, 13, 14, 16, 19;
@@ -222,6 +223,9 @@
// Summary of other concurrent trace recording.
optional AndroidOtherTracesMetric android_other_traces = 45;
+ // Per-process Binder transaction metrics.
+ optional AndroidBinderMetric android_binder = 46;
+
// Demo extensions.
extensions 450 to 499;
diff --git a/protos/perfetto/metrics/perfetto_merged_metrics.proto b/protos/perfetto/metrics/perfetto_merged_metrics.proto
index 8989e9f..c99b45a 100644
--- a/protos/perfetto/metrics/perfetto_merged_metrics.proto
+++ b/protos/perfetto/metrics/perfetto_merged_metrics.proto
@@ -65,6 +65,22 @@
// End of protos/perfetto/metrics/android/batt_metric.proto
+// Begin of protos/perfetto/metrics/android/binder_metric.proto
+
+// This metric provides per-process Binder statistics for traces with binder_driver enabled
+// Specifically, transactions are categorized and counted
+message AndroidBinderMetric {
+ message PerProcessBreakdown {
+ optional string process_name = 1;
+ optional uint32 pid = 2;
+ optional string slice_name = 3;
+ optional uint32 count = 4;
+ }
+
+ repeated PerProcessBreakdown process_breakdown = 1;
+}
+// End of protos/perfetto/metrics/android/binder_metric.proto
+
// Begin of protos/perfetto/metrics/android/camera_metric.proto
message AndroidCameraMetric {
@@ -1524,7 +1540,7 @@
// Root message for all Perfetto-based metrics.
//
-// Next id: 46
+// Next id: 47
message TraceMetrics {
reserved 4, 10, 13, 14, 16, 19;
@@ -1647,6 +1663,9 @@
// Summary of other concurrent trace recording.
optional AndroidOtherTracesMetric android_other_traces = 45;
+ // Per-process Binder transaction metrics.
+ optional AndroidBinderMetric android_binder = 46;
+
// Demo extensions.
extensions 450 to 499;
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 27c1e5d..2a1e323 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -659,12 +659,11 @@
// multiple.
optional uint32 proc_stats_cache_ttl_ms = 6;
- // Whether to record /proc/tid/time_in_state.
- optional bool record_thread_time_in_state = 7;
+ // DEPRECATED record_thread_time_in_state
+ reserved 7;
- // Size of the cache for thread time_in_state cpu freq values.
- // If not specificed, the default is used.
- optional uint32 thread_time_in_state_cache_size = 8;
+ // DEPRECATED thread_time_in_state_cache_size
+ reserved 8;
}
// End of protos/perfetto/config/process_stats/process_stats_config.proto
@@ -9241,17 +9240,14 @@
message Thread {
optional int32 tid = 1;
- // Pairs of frequency (represented as a (1-based) index to CpuInfo
- // frequencies) and time at that frequency (represented as a number of
- // ticks, see SystemInfo for the HZ (ticks / second) value to convert this
- // to time). Frequencies with zero ticks are never uploaded. Read from
- // /proc/tid/time_in_state.
- repeated uint32 cpu_freq_indices = 2;
- repeated uint64 cpu_freq_ticks = 3;
- // Whether all frequencies with non-zero ticks are present in
- // `cpu_freq_indices`. This marker is used to detect packets that describe
- // time_in_state exhaustively.
- optional bool cpu_freq_full = 4;
+ // DEPRECATED cpu_freq_indices
+ reserved 2;
+
+ // DEPRECATED cpu_freq_ticks
+ reserved 3;
+
+ // DEPRECATED cpu_freq_full
+ reserved 4;
}
message Process {
diff --git a/protos/perfetto/trace/ps/process_stats.proto b/protos/perfetto/trace/ps/process_stats.proto
index df82c75..d647de2 100644
--- a/protos/perfetto/trace/ps/process_stats.proto
+++ b/protos/perfetto/trace/ps/process_stats.proto
@@ -30,17 +30,14 @@
message Thread {
optional int32 tid = 1;
- // Pairs of frequency (represented as a (1-based) index to CpuInfo
- // frequencies) and time at that frequency (represented as a number of
- // ticks, see SystemInfo for the HZ (ticks / second) value to convert this
- // to time). Frequencies with zero ticks are never uploaded. Read from
- // /proc/tid/time_in_state.
- repeated uint32 cpu_freq_indices = 2;
- repeated uint64 cpu_freq_ticks = 3;
- // Whether all frequencies with non-zero ticks are present in
- // `cpu_freq_indices`. This marker is used to detect packets that describe
- // time_in_state exhaustively.
- optional bool cpu_freq_full = 4;
+ // DEPRECATED cpu_freq_indices
+ reserved 2;
+
+ // DEPRECATED cpu_freq_ticks
+ reserved 3;
+
+ // DEPRECATED cpu_freq_full
+ reserved 4;
}
message Process {
diff --git a/protos/perfetto/trace_processor/trace_processor.proto b/protos/perfetto/trace_processor/trace_processor.proto
index 2d19871..dacd930 100644
--- a/protos/perfetto/trace_processor/trace_processor.proto
+++ b/protos/perfetto/trace_processor/trace_processor.proto
@@ -41,7 +41,7 @@
// every time a new feature that the UI depends on is being introduced (e.g.
// new tables, new SQL operators, metrics that are required by the UI).
// See also TraceProcessorVersion (below).
- TRACE_PROCESSOR_CURRENT_API_VERSION = 3;
+ TRACE_PROCESSOR_CURRENT_API_VERSION = 4;
}
// At lowest level, the wire-format of the RPC procol is a linear sequence of
diff --git a/python/perfetto/trace_processor/metrics.descriptor b/python/perfetto/trace_processor/metrics.descriptor
index 5588fc6..81b6b62 100644
--- a/python/perfetto/trace_processor/metrics.descriptor
+++ b/python/perfetto/trace_processor/metrics.descriptor
Binary files differ
diff --git a/python/perfetto/trace_processor/metrics.descriptor.sha1 b/python/perfetto/trace_processor/metrics.descriptor.sha1
index 9128379..8d1166a 100644
--- a/python/perfetto/trace_processor/metrics.descriptor.sha1
+++ b/python/perfetto/trace_processor/metrics.descriptor.sha1
@@ -2,5 +2,5 @@
// SHA1(tools/gen_binary_descriptors)
// c4a38769074f8a8c2ffbf514b267919b5f2d47df
// SHA1(protos/perfetto/metrics/metrics.proto)
-// 345fbfdfcdd221b820374ee35469035d1d86c5c1
+// 1555061bf1527fce27559876acaf3c31f82bf1d2
\ No newline at end of file
diff --git a/python/perfetto/trace_processor/trace_processor.descriptor b/python/perfetto/trace_processor/trace_processor.descriptor
index d8fe39e..7c0df2d 100644
--- a/python/perfetto/trace_processor/trace_processor.descriptor
+++ b/python/perfetto/trace_processor/trace_processor.descriptor
Binary files differ
diff --git a/python/perfetto/trace_processor/trace_processor.descriptor.sha1 b/python/perfetto/trace_processor/trace_processor.descriptor.sha1
index 3d9e075..d1ce3ae 100644
--- a/python/perfetto/trace_processor/trace_processor.descriptor.sha1
+++ b/python/perfetto/trace_processor/trace_processor.descriptor.sha1
@@ -2,5 +2,5 @@
// SHA1(tools/gen_binary_descriptors)
// c4a38769074f8a8c2ffbf514b267919b5f2d47df
// SHA1(protos/perfetto/trace_processor/trace_processor.proto)
-// ea89764637957b3b71978972257aba2f0fddbfc9
+// 412428727ee668284c5c420fcc1d22459eced403
\ No newline at end of file
diff --git a/src/trace_processor/dynamic/thread_state_generator.cc b/src/trace_processor/dynamic/thread_state_generator.cc
index d307acc..18b1922 100644
--- a/src/trace_processor/dynamic/thread_state_generator.cc
+++ b/src/trace_processor/dynamic/thread_state_generator.cc
@@ -42,10 +42,7 @@
const BitVector&,
std::unique_ptr<Table>& table_return) {
if (!unsorted_thread_state_table_) {
- int64_t trace_end_ts =
- context_->storage->GetTraceTimestampBoundsNs().second;
-
- unsorted_thread_state_table_ = ComputeThreadStateTable(trace_end_ts);
+ unsorted_thread_state_table_ = ComputeThreadStateTable();
// We explicitly sort by ts here as ComputeThreadStateTable does not insert
// rows in sorted order but we expect our clients to always want to sort
@@ -62,7 +59,7 @@
}
std::unique_ptr<tables::ThreadStateTable>
-ThreadStateGenerator::ComputeThreadStateTable(int64_t trace_end_ts) {
+ThreadStateGenerator::ComputeThreadStateTable() {
std::unique_ptr<tables::ThreadStateTable> table(new tables::ThreadStateTable(
context_->storage->mutable_string_pool(), nullptr));
@@ -113,7 +110,7 @@
// to process that event.
int64_t min_ts = std::min({sched_ts, waking_ts, blocked_ts});
if (min_ts == sched_ts) {
- AddSchedEvent(sched, sched_idx++, state_map, trace_end_ts, table.get());
+ AddSchedEvent(sched, sched_idx++, state_map, table.get());
} else if (min_ts == waking_ts) {
AddWakingEvent(waking, waking_idx++, state_map);
} else /* (min_ts == blocked_ts) */ {
@@ -135,7 +132,6 @@
void ThreadStateGenerator::AddSchedEvent(const Table& sched,
uint32_t sched_idx,
TidInfoMap& state_map,
- int64_t trace_end_ts,
tables::ThreadStateTable* table) {
int64_t ts = sched.GetTypedColumnByName<int64_t>("ts")[sched_idx];
UniqueTid utid = sched.GetTypedColumnByName<uint32_t>("utid")[sched_idx];
@@ -171,15 +167,7 @@
// Reset so we don't have any leftover data on the next round.
*info = {};
- // Undo the expansion of the final sched slice for each CPU to the end of the
- // trace by setting the duration back to -1. This counteracts the code in
- // SchedEventTracker::FlushPendingEvents
- // TODO(lalitm): remove this hack when we stop expanding the last slice to the
- // end of the trace.
int64_t dur = sched.GetTypedColumnByName<int64_t>("dur")[sched_idx];
- if (ts + dur == trace_end_ts) {
- dur = -1;
- }
// Now add the sched slice itself as "Running" with the other fields
// unchanged.
@@ -209,7 +197,6 @@
void ThreadStateGenerator::AddWakingEvent(const Table& waking,
uint32_t waking_idx,
TidInfoMap& state_map) {
- int64_t ts = waking.GetTypedColumnByName<int64_t>("ts")[waking_idx];
UniqueTid utid = waking.GetTypedColumnByName<uint32_t>("utid")[waking_idx];
ThreadSchedInfo* info = &state_map[utid];
@@ -236,6 +223,7 @@
// Case 1 described above. In this situation, we should drop the waking
// entirely.
+ int64_t ts = waking.GetTypedColumnByName<int64_t>("ts")[waking_idx];
if (info->desched_ts && *info->desched_ts > ts) {
return;
}
@@ -245,6 +233,19 @@
// already not set because we could have data-loss which leads to us getting
// back to back waking for a single thread.
info->runnable_ts = ts;
+
+ // We can't do anything better than ignoring any errors here.
+ // TODO(b/229983659): expose error messages properly once we move to real
+ // time.
+ base::Optional<Variadic> opt_value;
+ ArgSetId arg_set_id =
+ waking.GetTypedColumnByName<ArgSetId>("arg_set_id")[waking_idx];
+ base::Status status =
+ context_->storage->ExtractArg(arg_set_id, "waker_utid", &opt_value);
+ if (status.ok() && opt_value) {
+ PERFETTO_CHECK(opt_value->type == Variadic::Type::kUint);
+ info->runnable_waker_utid = static_cast<UniqueTid>(opt_value->uint_value);
+ }
}
Table::Schema ThreadStateGenerator::CreateSchema() {
@@ -298,6 +299,7 @@
row.dur = end_ts ? *end_ts - row.ts : -1;
row.state = runnable_string_id_;
row.utid = utid;
+ row.waker_utid = info.runnable_waker_utid;
table->Insert(row);
}
}
@@ -318,7 +320,8 @@
context_->storage->ExtractArg(arg_set_id, "io_wait", &opt_value);
// We can't do anything better than ignoring any errors here.
- // TODO(lalitm): see if there's a better way to handle this.
+ // TODO(b/229983659): expose error messages properly once we move to real
+ // time.
if (status.ok() && opt_value) {
PERFETTO_CHECK(opt_value->type == Variadic::Type::kBool);
info.io_wait = opt_value->bool_value;
diff --git a/src/trace_processor/dynamic/thread_state_generator.h b/src/trace_processor/dynamic/thread_state_generator.h
index 8e111de..9a4057f 100644
--- a/src/trace_processor/dynamic/thread_state_generator.h
+++ b/src/trace_processor/dynamic/thread_state_generator.h
@@ -45,8 +45,7 @@
std::unique_ptr<Table>& table_return) override;
// Visible for testing.
- std::unique_ptr<tables::ThreadStateTable> ComputeThreadStateTable(
- int64_t trace_end_ts);
+ std::unique_ptr<tables::ThreadStateTable> ComputeThreadStateTable();
private:
struct ThreadSchedInfo {
@@ -56,6 +55,7 @@
base::Optional<bool> io_wait;
base::Optional<int64_t> runnable_ts;
base::Optional<StringId> blocked_function;
+ base::Optional<UniqueTid> runnable_waker_utid;
};
using TidInfoMap = base::FlatHashMap<UniqueTid,
ThreadSchedInfo,
@@ -66,7 +66,6 @@
void AddSchedEvent(const Table& sched,
uint32_t sched_idx,
TidInfoMap& state_map,
- int64_t trace_end_ts,
tables::ThreadStateTable* table);
void AddWakingEvent(const Table& wakeup,
diff --git a/src/trace_processor/dynamic/thread_state_generator_unittest.cc b/src/trace_processor/dynamic/thread_state_generator_unittest.cc
index bd15010..469fb3e 100644
--- a/src/trace_processor/dynamic/thread_state_generator_unittest.cc
+++ b/src/trace_processor/dynamic/thread_state_generator_unittest.cc
@@ -89,10 +89,8 @@
context_.args_tracker->Flush();
}
- void RunThreadStateComputation(Ts trace_end_ts = Ts{
- std::numeric_limits<int64_t>::max()}) {
- unsorted_table_ =
- thread_state_generator_->ComputeThreadStateTable(trace_end_ts.ts);
+ void RunThreadStateComputation() {
+ unsorted_table_ = thread_state_generator_->ComputeThreadStateTable();
table_.reset(
new Table(unsorted_table_->Sort({unsorted_table_->ts().ascending()})));
}
@@ -293,11 +291,11 @@
VerifyEndOfThreadState();
}
-TEST_F(ThreadStateGeneratorUnittest, StrechedSchedIgnored) {
+TEST_F(ThreadStateGeneratorUnittest, HandlingNotFinishedSched) {
ForwardSchedTo(Ts{10});
- AddSched(Ts{100}, thread_a_, "");
+ AddSched(base::nullopt, thread_a_, "S");
- RunThreadStateComputation(Ts{100});
+ RunThreadStateComputation();
VerifyThreadState(Ts{10}, base::nullopt, thread_a_, kRunning);
@@ -306,11 +304,11 @@
TEST_F(ThreadStateGeneratorUnittest, WakingAfterStrechedSched) {
ForwardSchedTo(Ts{10});
- AddSched(Ts{100}, thread_a_, "");
+ AddSched(base::nullopt, thread_a_, "");
AddWaking(Ts{15}, thread_a_);
- RunThreadStateComputation(Ts{100});
+ RunThreadStateComputation();
VerifyThreadState(Ts{10}, base::nullopt, thread_a_, kRunning);
VerifyThreadState(Ts{15}, base::nullopt, thread_a_, "R");
diff --git a/src/trace_processor/importers/ftrace/sched_event_tracker.cc b/src/trace_processor/importers/ftrace/sched_event_tracker.cc
index 62ded8c..6ae2a83 100644
--- a/src/trace_processor/importers/ftrace/sched_event_tracker.cc
+++ b/src/trace_processor/importers/ftrace/sched_event_tracker.cc
@@ -229,10 +229,11 @@
}
// Open a new scheduling slice, corresponding to the task that was
- // just switched to.
+ // just switched to. Set the duration to -1, to indicate that the event is not
+ // finished. Duration will be updated later after event finish.
auto* sched = context_->storage->mutable_sched_slice_table();
auto row_and_id = sched->Insert(
- {ts, 0 /* duration */, cpu, next_utid, kNullStringId, next_prio});
+ {ts, /* duration */ -1, cpu, next_utid, kNullStringId, next_prio});
SchedId sched_id = row_and_id.id;
return *sched->id().IndexOf(sched_id);
}
@@ -325,31 +326,5 @@
waker_utid_id_, Variadic::UnsignedInteger(curr_utid));
}
-void SchedEventTracker::FlushPendingEvents() {
- // TODO(lalitm): the day this method is called before end of trace, don't
- // flush the sched events as they will probably be pushed in the next round
- // of ftrace events.
- int64_t end_ts = context_->storage->GetTraceTimestampBoundsNs().second;
- auto* slices = context_->storage->mutable_sched_slice_table();
- for (const auto& pending_sched : pending_sched_per_cpu_) {
- uint32_t row = pending_sched.pending_slice_storage_idx;
- if (row == std::numeric_limits<uint32_t>::max())
- continue;
-
- int64_t duration = end_ts - slices->ts()[row];
- slices->mutable_dur()->Set(row, duration);
-
- auto state = ftrace_utils::TaskState(ftrace_utils::TaskState::kRunnable);
- auto id = context_->storage->InternString(state.ToString().data());
- slices->mutable_end_state()->Set(row, id);
- }
-
- // Re-initialize the pending_sched_per_cpu_ vector with default values, we do
- // this instead of calling .clear() to avoid having to frequently resize the
- // vector.
- std::fill(pending_sched_per_cpu_.begin(), pending_sched_per_cpu_.end(),
- PendingSchedInfo{});
-}
-
} // namespace trace_processor
} // namespace perfetto
diff --git a/src/trace_processor/importers/ftrace/sched_event_tracker.h b/src/trace_processor/importers/ftrace/sched_event_tracker.h
index eff442c..5dc37b3 100644
--- a/src/trace_processor/importers/ftrace/sched_event_tracker.h
+++ b/src/trace_processor/importers/ftrace/sched_event_tracker.h
@@ -77,10 +77,6 @@
int32_t prio,
StringId comm_id);
- // Called at the end of trace to flush any events which are pending to the
- // storage.
- void FlushPendingEvents();
-
private:
// Information retained from the preceding sched_switch seen on a given cpu.
struct PendingSchedInfo {
diff --git a/src/trace_processor/metrics/sql/BUILD.gn b/src/trace_processor/metrics/sql/BUILD.gn
index f90c2a0..0ad6c5b 100644
--- a/src/trace_processor/metrics/sql/BUILD.gn
+++ b/src/trace_processor/metrics/sql/BUILD.gn
@@ -18,6 +18,7 @@
"trace_metadata.sql",
"trace_stats.sql",
"android/android_batt.sql",
+ "android/android_binder.sql",
"android/android_camera.sql",
"android/android_camera_unagg.sql",
"android/android_cpu.sql",
diff --git a/src/trace_processor/metrics/sql/android/android_binder.sql b/src/trace_processor/metrics/sql/android/android_binder.sql
new file mode 100644
index 0000000..752eed8
--- /dev/null
+++ b/src/trace_processor/metrics/sql/android/android_binder.sql
@@ -0,0 +1,47 @@
+--
+-- Copyright 2022 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.
+--
+
+-- Count Binder transactions per process
+CREATE VIEW binder_metrics_by_process AS
+SELECT
+ process.name as process_name,
+ process.pid as pid,
+ slice.name as slice_name,
+ COUNT(*) as event_count
+FROM slice
+ INNER JOIN thread_track ON slice.track_id=thread_track.id
+ INNER JOIN thread ON thread.utid=thread_track.utid
+ INNER JOIN process ON thread.upid=process.upid
+WHERE
+ slice.name like 'binder%'
+GROUP BY
+ process_name,
+ slice_name;
+
+CREATE VIEW android_binder_output AS
+SELECT AndroidBinderMetric(
+ 'process_breakdown', (
+ SELECT RepeatedField(
+ AndroidBinderMetric_PerProcessBreakdown(
+ 'process_name', process_name,
+ 'pid', pid,
+ 'slice_name', slice_name,
+ 'count', event_count
+ )
+ )
+ FROM binder_metrics_by_process
+ )
+);
diff --git a/src/trace_processor/tables/slice_tables.h b/src/trace_processor/tables/slice_tables.h
index 629576c..67dd323 100644
--- a/src/trace_processor/tables/slice_tables.h
+++ b/src/trace_processor/tables/slice_tables.h
@@ -85,9 +85,10 @@
C(int64_t, dur) \
C(base::Optional<uint32_t>, cpu) \
C(uint32_t, utid) \
- C(StringPool::Id, state) \
+ C(base::Optional<StringPool::Id>, state) \
C(base::Optional<uint32_t>, io_wait) \
- C(base::Optional<StringPool::Id>, blocked_function)
+ C(base::Optional<StringPool::Id>, blocked_function) \
+ C(base::Optional<uint32_t>, waker_utid)
PERFETTO_TP_TABLE(PERFETTO_TP_THREAD_STATE_TABLE_DEF);
diff --git a/src/trace_processor/trace_database_integrationtest.cc b/src/trace_processor/trace_database_integrationtest.cc
index f70d593..3c5c66e 100644
--- a/src/trace_processor/trace_database_integrationtest.cc
+++ b/src/trace_processor/trace_database_integrationtest.cc
@@ -133,7 +133,7 @@
"where dur != 0 and utid != 0");
ASSERT_TRUE(it.Next());
ASSERT_EQ(it.Get(0).type, SqlValue::kLong);
- ASSERT_EQ(it.Get(0).long_value, 139787);
+ ASSERT_EQ(it.Get(0).long_value, 139793);
ASSERT_EQ(it.Get(1).type, SqlValue::kLong);
ASSERT_EQ(it.Get(1).long_value, 19684308497);
ASSERT_FALSE(it.Next());
diff --git a/src/trace_processor/trace_processor_impl.cc b/src/trace_processor/trace_processor_impl.cc
index 773ee66..6a42028 100644
--- a/src/trace_processor/trace_processor_impl.cc
+++ b/src/trace_processor/trace_processor_impl.cc
@@ -946,7 +946,6 @@
RegisterDbTable(storage->flow_table());
RegisterDbTable(storage->thread_slice_table());
RegisterDbTable(storage->sched_slice_table());
- RegisterDbTable(storage->legacy_instant_table());
RegisterDbTable(storage->gpu_slice_table());
RegisterDbTable(storage->track_table());
@@ -1024,7 +1023,6 @@
TraceProcessorStorageImpl::NotifyEndOfFile();
- SchedEventTracker::GetOrCreate(&context_)->FlushPendingEvents();
context_.metadata_tracker->SetMetadata(
metadata::trace_size_bytes,
Variadic::Integer(static_cast<int64_t>(bytes_parsed_)));
diff --git a/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256 b/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
index 80ea2f4..7fb4743 100644
--- a/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
+++ b/test/data/ui-screenshots/ui-android_trace_30s_expand_camera.png.sha256
@@ -1 +1 @@
-436e358bbe14b492a48f369a4296fff45de2879308196ce9838ea1df7adcd7c8
\ No newline at end of file
+d0efe67d67d027f147eeb743d5c9e60607c89dfaa93be7c7c5af1b9965eccbd1
\ No newline at end of file
diff --git a/test/data/ui-screenshots/ui-android_trace_30s_load.png.sha256 b/test/data/ui-screenshots/ui-android_trace_30s_load.png.sha256
index 2e9be1c..3da7ed0 100644
--- a/test/data/ui-screenshots/ui-android_trace_30s_load.png.sha256
+++ b/test/data/ui-screenshots/ui-android_trace_30s_load.png.sha256
@@ -1 +1 @@
-69c67284528cb436f7fc541748db2c3e3118f77bed1803447cbb8158686daed9
\ No newline at end of file
+296867c695b408811139b6de52f5ada0f2b2da6c341d62b772c4542ed118c189
\ No newline at end of file
diff --git a/test/trace_processor/parsing/android_binder.out b/test/trace_processor/parsing/android_binder.out
new file mode 100644
index 0000000..ef53b12
--- /dev/null
+++ b/test/trace_processor/parsing/android_binder.out
@@ -0,0 +1,20 @@
+android_binder {
+ process_breakdown {
+ process_name: "test_process_a"
+ pid: 1
+ slice_name: "binder transaction"
+ count: 2
+ }
+ process_breakdown {
+ process_name: "test_process_b"
+ pid: 2
+ slice_name: "binder reply"
+ count: 1
+ }
+ process_breakdown {
+ process_name: "test_process_c"
+ pid: 3
+ slice_name: "binder reply"
+ count: 1
+ }
+}
\ No newline at end of file
diff --git a/test/trace_processor/parsing/android_binder.py b/test/trace_processor/parsing/android_binder.py
new file mode 100644
index 0000000..9cc29ba
--- /dev/null
+++ b/test/trace_processor/parsing/android_binder.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+# Copyright (C) 2022 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
+#
+# http://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.
+
+from os import sys, path
+
+import synth_common
+
+PROCESS_A_NAME = 'test_process_a'
+PROCESS_B_NAME = 'test_process_b'
+PROCESS_C_NAME = 'test_process_c'
+PROCESS_A_PID = 1
+PROCESS_B_PID = 2
+PROCESS_C_PID = 3
+PROCESS_A_PPID = 4
+PROCESS_B_PPID = 5
+PROCESS_C_PPID = 6
+PROCESS_A_TID = 7
+# These values need to be the same to keep track of process ids in kernel space
+PROCESS_B_TID = PROCESS_B_PID
+PROCESS_C_TID = PROCESS_C_PID
+
+trace = synth_common.create_trace()
+trace.add_packet()
+trace.add_process(PROCESS_A_PID, PROCESS_A_PPID, PROCESS_A_NAME)
+trace.add_process(PROCESS_B_PID, PROCESS_B_PPID, PROCESS_B_NAME)
+trace.add_process(PROCESS_C_PID, PROCESS_C_PPID, PROCESS_C_NAME)
+trace.add_thread(PROCESS_A_TID, PROCESS_A_PID, cmdline='Binder')
+trace.add_ftrace_packet(cpu=0)
+
+trace.add_binder_transaction(transaction_id=1, ts_start=1, ts_end=2, tid=PROCESS_A_TID,
+ pid=PROCESS_A_PID, reply_id=2, reply_ts_start=3, reply_ts_end=4,
+ reply_tid=PROCESS_B_TID, reply_pid=PROCESS_B_PID)
+trace.add_binder_transaction(transaction_id=3, ts_start=5, ts_end=6, tid=PROCESS_A_TID,
+ pid=PROCESS_A_PID, reply_id=4, reply_ts_start=7, reply_ts_end=8,
+ reply_tid=PROCESS_C_TID, reply_pid=PROCESS_C_PID)
+
+sys.stdout.buffer.write(trace.trace.SerializeToString())
\ No newline at end of file
diff --git a/test/trace_processor/parsing/android_sched_and_ps_end_reason_neq.out b/test/trace_processor/parsing/android_sched_and_ps_end_reason_neq.out
index fb9227a..3d9a00a 100644
--- a/test/trace_processor/parsing/android_sched_and_ps_end_reason_neq.out
+++ b/test/trace_processor/parsing/android_sched_and_ps_end_reason_neq.out
@@ -1,6 +1,6 @@
"end_state","count(*)"
"DK",30
"I",82
-"R",91197
+"R",91189
"R+",9428
"S",110560
diff --git a/test/trace_processor/parsing/ftrace_with_tracing_start_list_sched_slice_spans.out b/test/trace_processor/parsing/ftrace_with_tracing_start_list_sched_slice_spans.out
index de5e654..f6748c7 100644
--- a/test/trace_processor/parsing/ftrace_with_tracing_start_list_sched_slice_spans.out
+++ b/test/trace_processor/parsing/ftrace_with_tracing_start_list_sched_slice_spans.out
@@ -1,3 +1,3 @@
"ts","dur","tid"
100,10,1
-110,0,2
+110,-1,2
diff --git a/test/trace_processor/parsing/index b/test/trace_processor/parsing/index
index 8011022..3ceeed7 100644
--- a/test/trace_processor/parsing/index
+++ b/test/trace_processor/parsing/index
@@ -153,3 +153,6 @@
# coming from stderr before the TRACE: marker. See b/208691037.
../../data/atrace_uncompressed_b_208691037 sched_smoke.sql atrace_uncompressed_sched_count.out
otheruuids.textproto android_other_traces otheruuids_android_other_traces.out
+
+# Per-process Binder transaction metrics
+android_binder.py android_binder android_binder.out
diff --git a/test/trace_processor/parsing/sched_blocked_proto.py b/test/trace_processor/parsing/sched_blocked_proto.py
index a6589f8..acc0fba 100644
--- a/test/trace_processor/parsing/sched_blocked_proto.py
+++ b/test/trace_processor/parsing/sched_blocked_proto.py
@@ -27,7 +27,10 @@
trace.add_process(3, 0, "unblocker")
trace.add_ftrace_packet(0)
-trace.add_sched_blocked_reason(ts=100, pid=1, io_wait=0, unblock_pid=3)
-trace.add_sched_blocked_reason(ts=110, pid=2, io_wait=1, unblock_pid=3)
+trace.add_sched(ts=10, prev_pid=0, prev_comm='swapper', prev_state='R', next_pid=1, next_comm='foo')
+trace.add_sched(ts=100, prev_pid=1, prev_state='U', next_pid=2, next_comm='bar')
+trace.add_sched_blocked_reason(ts=101, pid=1, io_wait=0, unblock_pid=3)
+trace.add_sched(ts=110, prev_pid=2, prev_state='U', next_pid=0)
+trace.add_sched_blocked_reason(ts=111, pid=2, io_wait=1, unblock_pid=3)
sys.stdout.buffer.write(trace.trace.SerializeToString())
diff --git a/test/trace_processor/parsing/sched_blocked_reason.sql b/test/trace_processor/parsing/sched_blocked_reason.sql
index b0d85d5..1761c97 100644
--- a/test/trace_processor/parsing/sched_blocked_reason.sql
+++ b/test/trace_processor/parsing/sched_blocked_reason.sql
@@ -1,5 +1,5 @@
-select ts, tid, EXTRACT_ARG(arg_set_id, 'io_wait') as io_wait
-from legacy_instant
-join thread USING (utid)
-where legacy_instant.name = 'sched_blocked_reason'
-order by ts
\ No newline at end of file
+select ts, tid, io_wait
+from thread_state
+join thread using (utid)
+where state = 'D'
+order by ts
diff --git a/test/trace_processor/parsing/sched_blocked_reason_function.sql b/test/trace_processor/parsing/sched_blocked_reason_function.sql
index ffd843c..ffa1e10 100644
--- a/test/trace_processor/parsing/sched_blocked_reason_function.sql
+++ b/test/trace_processor/parsing/sched_blocked_reason_function.sql
@@ -1,8 +1,8 @@
select
ts,
thread.tid as pid,
- EXTRACT_ARG(arg_set_id, 'function') as func
-from legacy_instant
+ blocked_function as func
+from thread_state
join thread USING (utid)
-where legacy_instant.name = 'sched_blocked_reason'
-order by ts
\ No newline at end of file
+where state = 'D'
+order by ts
diff --git a/test/trace_processor/parsing/sched_blocked_reason_symbolized.textproto b/test/trace_processor/parsing/sched_blocked_reason_symbolized.textproto
index 6b26df0..dd50f45 100644
--- a/test/trace_processor/parsing/sched_blocked_reason_symbolized.textproto
+++ b/test/trace_processor/parsing/sched_blocked_reason_symbolized.textproto
@@ -2,7 +2,29 @@
ftrace_events {
cpu: 1
event {
+ timestamp: 50
+ pid: 0
+ sched_switch {
+ prev_comm: "swapper/1"
+ prev_pid: 0
+ prev_state: 2
+ next_comm: "100"
+ next_pid: 100
+ }
+ }
+ event {
timestamp: 1000000
+ pid: 100
+ sched_switch {
+ prev_comm: "100"
+ prev_pid: 100
+ prev_state: 2
+ next_comm: "101"
+ next_pid: 101
+ }
+ }
+ event {
+ timestamp: 1000010
pid: 0
sched_blocked_reason {
pid: 100
@@ -12,6 +34,17 @@
}
event {
timestamp: 1001000
+ pid: 101
+ sched_switch {
+ prev_comm: "101"
+ prev_pid: 101
+ prev_state: 2
+ next_comm: "100"
+ next_pid: 100
+ }
+ }
+ event {
+ timestamp: 1001010
pid: 0
sched_blocked_reason {
pid: 101
@@ -35,7 +68,29 @@
ftrace_events {
cpu: 2
event {
+ timestamp: 60
+ pid: 0
+ sched_switch {
+ prev_comm: "swapper/2"
+ prev_pid: 0
+ prev_state: 2
+ next_comm: "102"
+ next_pid: 102
+ }
+ }
+ event {
timestamp: 999000
+ pid: 102
+ sched_switch {
+ prev_comm: "102"
+ prev_pid: 102
+ prev_state: 2
+ next_comm: "103"
+ next_pid: 103
+ }
+ }
+ event {
+ timestamp: 999010
pid: 0
sched_blocked_reason {
pid: 102
@@ -45,6 +100,17 @@
}
event {
timestamp: 1002000
+ pid: 103
+ sched_switch {
+ prev_comm: "103"
+ prev_pid: 103
+ prev_state: 2
+ next_comm: "104"
+ next_pid: 104
+ }
+ }
+ event {
+ timestamp: 1002010
pid: 0
sched_blocked_reason {
pid: 103
@@ -54,6 +120,17 @@
}
event {
timestamp: 1005000
+ pid: 102
+ sched_switch {
+ prev_comm: "104"
+ prev_pid: 104
+ prev_state: 2
+ next_comm: "swapper/2"
+ next_pid: 0
+ }
+ }
+ event {
+ timestamp: 1005010
pid: 0
sched_blocked_reason {
pid: 104
@@ -69,6 +146,28 @@
ftrace_events {
cpu: 3
event {
+ timestamp: 60
+ pid: 0
+ sched_switch {
+ prev_comm: "swapper/2"
+ prev_pid: 0
+ prev_state: 2
+ next_comm: "105"
+ next_pid: 105
+ }
+ }
+ event {
+ timestamp: 999000
+ pid: 105
+ sched_switch {
+ prev_comm: "105"
+ prev_pid: 105
+ prev_state: 2
+ next_comm: "swapper/3"
+ next_pid: 0
+ }
+ }
+ event {
timestamp: 999000
pid: 0
sched_blocked_reason {
@@ -92,6 +191,17 @@
cpu: 1
event {
timestamp: 1003000
+ pid: 100
+ sched_switch {
+ prev_comm: "100"
+ prev_pid: 100
+ prev_state: 2
+ next_comm: "swapper/1"
+ next_pid: 0
+ }
+ }
+ event {
+ timestamp: 1003010
pid: 0
sched_blocked_reason {
pid: 100
@@ -109,4 +219,4 @@
}
}
sequence_flags: 1
-}
\ No newline at end of file
+}
diff --git a/test/trace_processor/parsing/sched_blocked_reason_symbolized_to_systrace.out b/test/trace_processor/parsing/sched_blocked_reason_symbolized_to_systrace.out
index ea78ae5..ab49727 100644
--- a/test/trace_processor/parsing/sched_blocked_reason_symbolized_to_systrace.out
+++ b/test/trace_processor/parsing/sched_blocked_reason_symbolized_to_systrace.out
@@ -1,8 +1,18 @@
"line"
-" <idle>-0 (-----) [002] .... 0.000999: sched_blocked_reason: pid=102 io_wait=1 caller=filemap_fault"
+" <idle>-0 (-----) [001] .... 0.000000: sched_switch: prev_comm=swapper/1 prev_pid=0 prev_prio=0 prev_state=D ==> next_comm=100 next_pid=100 next_prio=0"
+" <idle>-0 (-----) [002] .... 0.000000: sched_switch: prev_comm=swapper/2 prev_pid=0 prev_prio=0 prev_state=D ==> next_comm=102 next_pid=102 next_prio=0"
+" <idle>-0 (-----) [003] .... 0.000000: sched_switch: prev_comm=swapper/2 prev_pid=0 prev_prio=0 prev_state=D ==> next_comm=105 next_pid=105 next_prio=0"
+" 105-105 (-----) [003] .... 0.000999: sched_switch: prev_comm=105 prev_pid=105 prev_prio=0 prev_state=D ==> next_comm=swapper/3 next_pid=0 next_prio=0"
" <idle>-0 (-----) [003] .... 0.000999: sched_blocked_reason: pid=105 io_wait=1 caller=some_fn"
+" 102-102 (-----) [002] .... 0.000999: sched_switch: prev_comm=102 prev_pid=102 prev_prio=0 prev_state=D ==> next_comm=103 next_pid=103 next_prio=0"
+" <idle>-0 (-----) [002] .... 0.000999: sched_blocked_reason: pid=102 io_wait=1 caller=filemap_fault"
+" 100-100 (-----) [001] .... 0.001000: sched_switch: prev_comm=100 prev_pid=100 prev_prio=0 prev_state=D ==> next_comm=101 next_pid=101 next_prio=0"
" <idle>-0 (-----) [001] .... 0.001000: sched_blocked_reason: pid=100 io_wait=0 caller=filemap_fault"
+" 101-101 (-----) [001] .... 0.001001: sched_switch: prev_comm=101 prev_pid=101 prev_prio=0 prev_state=D ==> next_comm=100 next_pid=100 next_prio=0"
" <idle>-0 (-----) [001] .... 0.001001: sched_blocked_reason: pid=101 io_wait=0 caller=2"
+" 103-103 (-----) [002] .... 0.001002: sched_switch: prev_comm=103 prev_pid=103 prev_prio=0 prev_state=D ==> next_comm=104 next_pid=104 next_prio=0"
" <idle>-0 (-----) [002] .... 0.001002: sched_blocked_reason: pid=103 io_wait=1 caller=2"
+" 100-100 (-----) [001] .... 0.001003: sched_switch: prev_comm=100 prev_pid=100 prev_prio=0 prev_state=D ==> next_comm=swapper/1 next_pid=0 next_prio=0"
" <idle>-0 (-----) [001] .... 0.001003: sched_blocked_reason: pid=100 io_wait=1 caller=some_other_fn"
+" 104-104 (-----) [002] .... 0.001005: sched_switch: prev_comm=104 prev_pid=104 prev_prio=0 prev_state=D ==> next_comm=swapper/2 next_pid=0 next_prio=0"
" <idle>-0 (-----) [002] .... 0.001005: sched_blocked_reason: pid=104 io_wait=1 caller=filemap_fault"
diff --git a/test/trace_processor/parsing/sched_blocked_systrace.systrace b/test/trace_processor/parsing/sched_blocked_systrace.systrace
index 81046bf..f98b4c9 100644
--- a/test/trace_processor/parsing/sched_blocked_systrace.systrace
+++ b/test/trace_processor/parsing/sched_blocked_systrace.systrace
@@ -1,2 +1,6 @@
- <...>-3694 ( 3694) [006] d..3 20.258854: sched_blocked_reason: pid=269 iowait=0 caller=worker_thread+0x534/0x820
- <idle>-0 (-----) [000] d.s4 21.123838: sched_blocked_reason: pid=2172 iowait=1 caller=__filemap_fdatawait_range+0x134/0x150
+ <idle>-0 (-----) [006] .... 10.258854: sched_switch: prev_comm=swapper/6 prev_pid=0 prev_prio=120 prev_state=D ==> next_comm=foo next_pid=269 next_prio=130
+ foo-269 (-----) [006] .... 20.258854: sched_switch: prev_comm=foo prev_pid=269 prev_prio=120 prev_state=D ==> next_comm=swapper/6 next_pid=0 next_prio=130
+ <idle>-0 (-----) [006] d..3 20.258855: sched_blocked_reason: pid=269 iowait=0 caller=worker_thread+0x534/0x820
+ <idle>-0 (-----) [000] .... 21.058854: sched_switch: prev_comm=swapper/0 prev_pid=0 prev_prio=120 prev_state=D ==> next_comm=foo next_pid=2172 next_prio=130
+ bar-269 (-----) [000] .... 21.123838: sched_switch: prev_comm=bar prev_pid=2172 prev_prio=120 prev_state=D ==> next_comm=swapper/0 next_pid=0 next_prio=130
+ <idle>-0 (-----) [000] d.s4 21.123839: sched_blocked_reason: pid=2172 iowait=1 caller=__filemap_fdatawait_range+0x134/0x150
diff --git a/test/trace_processor/parsing/sched_slices_sched_switch_compact.out b/test/trace_processor/parsing/sched_slices_sched_switch_compact.out
index c2f2e7c..76a0073 100644
--- a/test/trace_processor/parsing/sched_slices_sched_switch_compact.out
+++ b/test/trace_processor/parsing/sched_slices_sched_switch_compact.out
@@ -16,7 +16,7 @@
807082959262516,0,126094,807082959388610,"S",120,22367,"kworker/u16:9"
807082959388610,0,71435840,807083030824450,"R",120,0,"swapper"
807083030824450,0,1662865,807083032487315,"S",120,29206,"traced"
-807083032487315,0,593281,807083033080596,"R",120,29207,"traced_probes"
+807083032487315,0,-1,807083032487314,"[NULL]",120,29207,"traced_probes"
807082863108704,1,42240,807082863150944,"R",120,0,"swapper"
807082863150944,1,42760,807082863193704,"S",49,4454,"irq/80-1436400."
807082863193704,1,1931823,807082865125527,"R",120,0,"swapper"
@@ -40,7 +40,7 @@
807083032698617,1,276146,807083032974763,"D",120,22367,"kworker/u16:9"
807083032974763,1,62396,807083033037159,"R",120,0,"swapper"
807083033037159,1,43437,807083033080596,"S",120,22367,"kworker/u16:9"
-807083033080596,1,0,807083033080596,"R",120,0,"swapper"
+807083033080596,1,-1,807083033080595,"[NULL]",120,0,"swapper"
807082865061361,2,399583,807082865460944,"D",120,22367,"kworker/u16:9"
807082865460944,2,46771,807082865507715,"R",120,0,"swapper"
807082865507715,2,30312,807082865538027,"S",120,22367,"kworker/u16:9"
@@ -56,13 +56,13 @@
807082948649130,2,185052,807082948834182,"D",120,22367,"kworker/u16:9"
807082948834182,2,357239,807082949191421,"R",120,0,"swapper"
807082949191421,2,55677,807082949247098,"S",120,22367,"kworker/u16:9"
-807082949247098,2,83833498,807083033080596,"R",120,0,"swapper"
+807082949247098,2,-1,807082949247097,"[NULL]",120,0,"swapper"
807082947555119,3,37083,807082947592202,"R",120,0,"swapper"
807082947592202,3,38177,807082947630379,"S",120,7,"rcu_preempt"
807082947630379,3,4172813,807082951803192,"R",120,0,"swapper"
807082951803192,3,83698,807082951886890,"S",120,7,"rcu_preempt"
807082951886890,3,40000,807082951926890,"S",120,45,"rcuop/4"
-807082951926890,3,81153706,807083033080596,"R",120,0,"swapper"
+807082951926890,3,-1,807082951926889,"[NULL]",120,0,"swapper"
807082862976152,4,14792,807082862990944,"S",120,29207,"traced_probes"
807082862990944,4,83901102,807082946892046,"R",120,0,"swapper"
807082946892046,4,327500,807082947219546,"S",120,29207,"traced_probes"
@@ -71,7 +71,7 @@
807082947303296,4,28958,807082947332254,"S",120,21092,"kworker/4:1"
807082947332254,4,83363707,807083030695961,"R",120,0,"swapper"
807083030695961,4,104895,807083030800856,"S",120,42,"ksoftirqd/4"
-807083030800856,4,2279740,807083033080596,"R",120,0,"swapper"
+807083030800856,4,-1,807083030800855,"[NULL]",120,0,"swapper"
807082952627307,7,1534375,807082954161682,"R",120,0,"swapper"
807082954161682,7,43490,807082954205172,"S",49,628,"sugov:4"
-807082954205172,7,78875424,807083033080596,"R",120,0,"swapper"
+807082954205172,7,-1,807082954205171,"[NULL]",120,0,"swapper"
diff --git a/test/trace_processor/parsing/sched_slices_sched_switch_original.out b/test/trace_processor/parsing/sched_slices_sched_switch_original.out
index 404a588..10e01a4 100644
--- a/test/trace_processor/parsing/sched_slices_sched_switch_original.out
+++ b/test/trace_processor/parsing/sched_slices_sched_switch_original.out
@@ -17,7 +17,7 @@
807082959262516,0,126094,807082959388610,"S",120,22367,"kworker/u16:9"
807082959388610,0,71435840,807083030824450,"R",120,0,"swapper"
807083030824450,0,1662865,807083032487315,"S",120,29206,"traced"
-807083032487315,0,593281,807083033080596,"R",120,29207,"traced_probes"
+807083032487315,0,-1,807083032487314,"[NULL]",120,29207,"traced_probes"
807082862950996,1,157708,807082863108704,"D",49,4454,"irq/80-1436400."
807082863108704,1,42240,807082863150944,"R",120,0,"swapper"
807082863150944,1,42760,807082863193704,"S",49,4454,"irq/80-1436400."
@@ -42,7 +42,7 @@
807083032698617,1,276146,807083032974763,"D",120,22367,"kworker/u16:9"
807083032974763,1,62396,807083033037159,"R",120,0,"swapper"
807083033037159,1,43437,807083033080596,"S",120,22367,"kworker/u16:9"
-807083033080596,1,0,807083033080596,"R",120,0,"swapper"
+807083033080596,1,-1,807083033080595,"[NULL]",120,0,"swapper"
807082862645371,2,2415990,807082865061361,"R",120,0,"swapper"
807082865061361,2,399583,807082865460944,"D",120,22367,"kworker/u16:9"
807082865460944,2,46771,807082865507715,"R",120,0,"swapper"
@@ -59,14 +59,14 @@
807082948649130,2,185052,807082948834182,"D",120,22367,"kworker/u16:9"
807082948834182,2,357239,807082949191421,"R",120,0,"swapper"
807082949191421,2,55677,807082949247098,"S",120,22367,"kworker/u16:9"
-807082949247098,2,83833498,807083033080596,"R",120,0,"swapper"
+807082949247098,2,-1,807082949247097,"[NULL]",120,0,"swapper"
807082947493504,3,61615,807082947555119,"S",120,28905,"kworker/3:0"
807082947555119,3,37083,807082947592202,"R",120,0,"swapper"
807082947592202,3,38177,807082947630379,"S",120,7,"rcu_preempt"
807082947630379,3,4172813,807082951803192,"R",120,0,"swapper"
807082951803192,3,83698,807082951886890,"S",120,7,"rcu_preempt"
807082951886890,3,40000,807082951926890,"S",120,45,"rcuop/4"
-807082951926890,3,81153706,807083033080596,"R",120,0,"swapper"
+807082951926890,3,-1,807082951926889,"[NULL]",120,0,"swapper"
807082862918652,4,57500,807082862976152,"S",120,29206,"traced"
807082862976152,4,14792,807082862990944,"S",120,29207,"traced_probes"
807082862990944,4,83901102,807082946892046,"R",120,0,"swapper"
@@ -76,8 +76,8 @@
807082947303296,4,28958,807082947332254,"S",120,21092,"kworker/4:1"
807082947332254,4,83363707,807083030695961,"R",120,0,"swapper"
807083030695961,4,104895,807083030800856,"S",120,42,"ksoftirqd/4"
-807083030800856,4,2279740,807083033080596,"R",120,0,"swapper"
+807083030800856,4,-1,807083030800855,"[NULL]",120,0,"swapper"
807082952486057,7,141250,807082952627307,"D",49,628,"sugov:4"
807082952627307,7,1534375,807082954161682,"R",120,0,"swapper"
807082954161682,7,43490,807082954205172,"S",49,628,"sugov:4"
-807082954205172,7,78875424,807083033080596,"R",120,0,"swapper"
+807082954205172,7,-1,807082954205171,"[NULL]",120,0,"swapper"
diff --git a/test/trace_processor/parsing/sched_wakeup.sql b/test/trace_processor/parsing/sched_wakeup.sql
index 73ea99e..1827627 100644
--- a/test/trace_processor/parsing/sched_wakeup.sql
+++ b/test/trace_processor/parsing/sched_wakeup.sql
@@ -14,8 +14,8 @@
-- limitations under the License.
--
SELECT ts, tid
-FROM legacy_instant
+FROM thread_state
JOIN thread USING (utid)
-WHERE legacy_instant.name = 'sched_wakeup'
+WHERE state = 'R'
ORDER BY ts
LIMIT 20
diff --git a/test/trace_processor/parsing/sched_wakeup_android_sched_and_ps.out b/test/trace_processor/parsing/sched_wakeup_android_sched_and_ps.out
index f758f61..66418ba 100644
--- a/test/trace_processor/parsing/sched_wakeup_android_sched_and_ps.out
+++ b/test/trace_processor/parsing/sched_wakeup_android_sched_and_ps.out
@@ -8,6 +8,7 @@
81473010638470,26204
81473010710501,7
81473012479667,24011
+81473012488313,23850
81473012628209,23912
81473012774667,23912
81473012837272,23912
@@ -18,4 +19,3 @@
81473013365136,23912
81473013408157,24011
81473013587428,24011
-81473013619095,23912
diff --git a/test/trace_processor/parsing/sched_waking_instants.sql b/test/trace_processor/parsing/sched_waking_instants.sql
index b14aab0..9b5606b 100644
--- a/test/trace_processor/parsing/sched_waking_instants.sql
+++ b/test/trace_processor/parsing/sched_waking_instants.sql
@@ -13,8 +13,8 @@
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
-SELECT ts, legacy_instant.name, thread.name, thread.tid
-FROM legacy_instant
+SELECT ts, thread.name, thread.tid
+FROM thread_state
JOIN thread USING (utid)
-WHERE legacy_instant.name = 'sched_waking'
+WHERE state = 'R'
ORDER BY ts
diff --git a/test/trace_processor/parsing/sched_waking_instants_compact_sched.out b/test/trace_processor/parsing/sched_waking_instants_compact_sched.out
index 201d48b..6eb1e7e 100644
--- a/test/trace_processor/parsing/sched_waking_instants_compact_sched.out
+++ b/test/trace_processor/parsing/sched_waking_instants_compact_sched.out
@@ -1,82 +1,78 @@
-"ts","name","name","tid"
-250978439491994,"sched_waking","rcu_sched",8
-250978441664547,"sched_waking","ksoftirqd/1",18
-250978441702515,"sched_waking","kworker/u16:18",17473
-250978444958245,"sched_waking","rcuop/0",10
-250978444974443,"sched_waking","rcuop/1",21
-250978444984234,"sched_waking","rcu_preempt",7
-250978445783141,"sched_waking","rcu_sched",8
-250978451590173,"sched_waking","rcu_preempt",7
-250978451591891,"sched_waking","rcu_sched",8
-250978451609131,"sched_waking","kworker/u16:18",17473
-250978451646579,"sched_waking","rcuos/0",11
-250978451716891,"sched_waking","rcuos/1",22
-250978452047048,"sched_waking","kworker/u16:18",17473
-250978458337725,"sched_waking","sugov:0",625
-250978458362100,"sched_waking","rcu_preempt",7
-250978458398455,"sched_waking","rcuop/0",10
-250978458419496,"sched_waking","rcuop/1",21
-250978459118038,"sched_waking","sugov:0",625
-250978465172309,"sched_waking","ksoftirqd/3",34
-250978465266789,"sched_waking","kworker/u16:18",17473
-250978593466697,"sched_waking","kworker/2:0",17438
-250978593734510,"sched_waking","kworker/u16:18",17473
-250978595521125,"sched_waking","kworker/2:3",17754
-250978595696645,"sched_waking","kworker/2:0",17438
-250978596068468,"sched_waking","kworker/2:3",17754
-250978596565656,"sched_waking","kworker/2:0",17438
-250978600598417,"sched_waking","kworker/2:0",17438
-250978600639042,"sched_waking","ksoftirqd/0",6
-250978604651907,"sched_waking","ksoftirqd/0",6
-250978604739980,"sched_waking","kworker/2:0",17438
-250978605185448,"sched_waking","ksoftirqd/2",26
-250978605260240,"sched_waking","kworker/u16:18",17473
-250978608903886,"sched_waking","kworker/2:0",17438
-250978608942220,"sched_waking","ksoftirqd/0",6
-250978612887272,"sched_waking","ksoftirqd/0",6
-250978612971283,"sched_waking","kworker/2:0",17438
-250978616876595,"sched_waking","kworker/2:0",17438
-250978616921700,"sched_waking","ksoftirqd/0",6
-250978617016804,"sched_waking","kworker/u16:18",17473
-250978620859669,"sched_waking","ksoftirqd/0",6
-250978620939148,"sched_waking","kworker/2:0",17438
-250978624836805,"sched_waking","kworker/2:0",17438
-250978624875398,"sched_waking","ksoftirqd/0",6
-250978624978003,"sched_waking","kworker/u16:18",17473
-250978628278107,"sched_waking","logd.klogd",651
-250978629289722,"sched_waking","rcuop/2",29
-250978629405763,"sched_waking","rcu_preempt",7
-250978635024462,"sched_waking","rcu_preempt",7
-250978635060191,"sched_waking","kworker/u16:18",17473
-250978635219514,"sched_waking","rcuop/2",29
-250978683441081,"sched_waking","kworker/2:0",17438
-250978683732331,"sched_waking","kworker/u16:18",17473
-250978685694259,"sched_waking","kworker/u16:18",17473
-250978740127441,"sched_waking","kworker/2:0",17438
-250978740425410,"sched_waking","kworker/u16:18",17473
-250978743210358,"sched_waking","kworker/u16:18",17473
-250978744945567,"sched_waking","logd.klogd",651
-250978746028431,"sched_waking","rcuop/2",29
-250978746173171,"sched_waking","rcu_preempt",7
-250978751622494,"sched_waking","rcu_preempt",7
-250978751661348,"sched_waking","kworker/u16:18",17473
-250978751792859,"sched_waking","rcuop/2",29
-250978751971817,"sched_waking","rcu_preempt",7
-250978758784578,"sched_waking","rcu_preempt",7
-250978758873745,"sched_waking","rcuop/2",29
-250978805144375,"sched_waking","traced_probes",17772
-250978806359896,"sched_waking","kworker/5:1",17667
-250978806428646,"sched_waking","kworker/u16:18",17473
-250978808058698,"sched_waking","rcuop/0",10
-250978808519271,"sched_waking","rcu_preempt",7
-250978815488490,"sched_waking","rcu_preempt",7
-250978815535678,"sched_waking","kworker/u16:18",17473
-250978815675782,"sched_waking","rcuop/0",10
-250978815738022,"sched_waking","rcuop/1",21
-250978860203182,"sched_waking","kworker/u16:18",17473
-250978880151205,"sched_waking","kworker/2:0",17438
-250978880432143,"sched_waking","kworker/u16:18",17473
-250978884120216,"sched_waking","traced",17771
-250978885260685,"sched_waking","rcuop/0",10
-250978885784018,"sched_waking","rcu_preempt",7
-250978885786674,"sched_waking","traced_probes",17772
+"ts","name","tid"
+250978441664547,"ksoftirqd/1",18
+250978441702515,"kworker/u16:18",17473
+250978444958245,"rcuop/0",10
+250978444974443,"rcuop/1",21
+250978444984234,"rcu_preempt",7
+250978445783141,"rcu_sched",8
+250978451590173,"rcu_preempt",7
+250978451591891,"rcu_sched",8
+250978451609131,"kworker/u16:18",17473
+250978451646579,"rcuos/0",11
+250978451716891,"rcuos/1",22
+250978452047048,"kworker/u16:18",17473
+250978458362100,"rcu_preempt",7
+250978458398455,"rcuop/0",10
+250978458419496,"rcuop/1",21
+250978459118038,"sugov:0",625
+250978465172309,"ksoftirqd/3",34
+250978465266789,"kworker/u16:18",17473
+250978593466697,"kworker/2:0",17438
+250978593734510,"kworker/u16:18",17473
+250978595521125,"kworker/2:3",17754
+250978595696645,"kworker/2:0",17438
+250978596068468,"kworker/2:3",17754
+250978596565656,"kworker/2:0",17438
+250978600598417,"kworker/2:0",17438
+250978600639042,"ksoftirqd/0",6
+250978604651907,"ksoftirqd/0",6
+250978604739980,"kworker/2:0",17438
+250978605185448,"ksoftirqd/2",26
+250978605260240,"kworker/u16:18",17473
+250978608903886,"kworker/2:0",17438
+250978608942220,"ksoftirqd/0",6
+250978612887272,"ksoftirqd/0",6
+250978612971283,"kworker/2:0",17438
+250978616876595,"kworker/2:0",17438
+250978616921700,"ksoftirqd/0",6
+250978617016804,"kworker/u16:18",17473
+250978620859669,"ksoftirqd/0",6
+250978620939148,"kworker/2:0",17438
+250978624836805,"kworker/2:0",17438
+250978624875398,"ksoftirqd/0",6
+250978624978003,"kworker/u16:18",17473
+250978628278107,"logd.klogd",651
+250978629289722,"rcuop/2",29
+250978629405763,"rcu_preempt",7
+250978635024462,"rcu_preempt",7
+250978635060191,"kworker/u16:18",17473
+250978635219514,"rcuop/2",29
+250978683441081,"kworker/2:0",17438
+250978683732331,"kworker/u16:18",17473
+250978740127441,"kworker/2:0",17438
+250978740425410,"kworker/u16:18",17473
+250978744945567,"logd.klogd",651
+250978746028431,"rcuop/2",29
+250978746173171,"rcu_preempt",7
+250978751622494,"rcu_preempt",7
+250978751661348,"kworker/u16:18",17473
+250978751792859,"rcuop/2",29
+250978751971817,"rcu_preempt",7
+250978758784578,"rcu_preempt",7
+250978758873745,"rcuop/2",29
+250978805144375,"traced_probes",17772
+250978806359896,"kworker/5:1",17667
+250978806428646,"kworker/u16:18",17473
+250978808058698,"rcuop/0",10
+250978808519271,"rcu_preempt",7
+250978815488490,"rcu_preempt",7
+250978815535678,"kworker/u16:18",17473
+250978815675782,"rcuop/0",10
+250978815738022,"rcuop/1",21
+250978860203182,"kworker/u16:18",17473
+250978880151205,"kworker/2:0",17438
+250978880432143,"kworker/u16:18",17473
+250978884120216,"traced",17771
+250978885260685,"rcuop/0",10
+250978885784018,"rcu_preempt",7
+250978885786674,"traced_probes",17772
diff --git a/test/trace_processor/parsing/systrace_html.out b/test/trace_processor/parsing/systrace_html.out
index 7bc9203..a9110c7 100644
--- a/test/trace_processor/parsing/systrace_html.out
+++ b/test/trace_processor/parsing/systrace_html.out
@@ -3627,11 +3627,11 @@
6824713593302000,5,19000,6824713593321000,45,"S",120,45,"rcuop/5",52
6824713593321000,5,9953000,6824713603274000,2738,"R",120,764,"atrace",20467
6824713593660000,6,42000,6824713593702000,6,"S",120,6,"rcu_sched",8
-6824713593702000,6,41271000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713593702000,6,-1,6824713593701999,0,"[NULL]",120,"[NULL]","swapper",0
6824713594142000,7,54000,6824713594196000,39,"S",120,39,"rcuos/4",45
-6824713594196000,7,40777000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713594196000,7,-1,6824713594195999,0,"[NULL]",120,"[NULL]","swapper",0
6824713594572000,4,31000,6824713594603000,46,"S",120,46,"rcuos/5",53
-6824713594603000,4,40370000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713594603000,4,-1,6824713594602999,0,"[NULL]",120,"[NULL]","swapper",0
6824713596806000,0,434000,6824713597240000,771,"S",97,493,"DispSync",676
6824713597240000,0,240000,6824713597480000,743,"S",120,743,"kworker/0:5",20371
6824713597480000,0,864000,6824713598344000,0,"R",120,"[NULL]","swapper",0
@@ -3677,7 +3677,7 @@
6824713631086000,0,116000,6824713631202000,702,"S",120,702,"kworker/u16:7",19422
6824713631202000,0,181000,6824713631383000,786,"S",111,494,"SDM_EventThread",685
6824713631383000,0,2291000,6824713633674000,0,"R",120,"[NULL]","swapper",0
-6824713631536000,3,3437000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713631536000,3,-1,6824713631535999,0,"[NULL]",120,"[NULL]","swapper",0
6824713631650000,1,63000,6824713631713000,771,"S",97,493,"DispSync",676
6824713631713000,1,1737000,6824713633450000,644,"S",120,644,"ndroid.systemui",1664
6824713631775000,2,255000,6824713632030000,482,"S",49,482,"sugov:0",605
@@ -3690,11 +3690,11 @@
6824713633512000,2,169000,6824713633681000,2738,"R+",120,764,"atrace",20467
6824713633674000,0,213000,6824713633887000,770,"S",120,493,"Binder:640_2",675
6824713633681000,2,75000,6824713633756000,489,"S",120,489,"atrace@1.0-serv",635
-6824713633756000,2,1217000,6824713634973000,2738,"R",120,764,"atrace",20467
-6824713633887000,0,1086000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713633756000,2,-1,6824713633755999,2738,"[NULL]",120,764,"atrace",20467
+6824713633887000,0,-1,6824713633886999,0,"[NULL]",120,"[NULL]","swapper",0
6824713634629000,1,131000,6824713634760000,773,"S",97,493,"app",678
-6824713634760000,1,213000,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713634760000,1,-1,6824713634759999,0,"[NULL]",120,"[NULL]","swapper",0
6824713634810000,5,70000,6824713634880000,5,"S",120,5,"rcu_preempt",7
6824713634880000,5,39000,6824713634919000,38,"S",120,38,"rcuop/4",44
6824713634919000,5,54000,6824713634973000,45,"S",120,45,"rcuop/5",52
-6824713634973000,5,0,6824713634973000,0,"R",120,"[NULL]","swapper",0
+6824713634973000,5,-1,6824713634972999,0,"[NULL]",120,"[NULL]","swapper",0
diff --git a/test/trace_processor/smoke/proxy_power.out b/test/trace_processor/smoke/proxy_power.out
index d57cfc5..dd16970 100644
--- a/test/trace_processor/smoke/proxy_power.out
+++ b/test/trace_processor/smoke/proxy_power.out
@@ -10,6 +10,6 @@
161,13.740925
23,12.703770
205,11.924118
-43,10.011150
-258,9.165919
+43,9.852783
+258,9.163192
1,9.137632
diff --git a/test/trace_processor/smoke/synth_1_smoke.out b/test/trace_processor/smoke/synth_1_smoke.out
index ac16d31..45bb0b3 100644
--- a/test/trace_processor/smoke/synth_1_smoke.out
+++ b/test/trace_processor/smoke/synth_1_smoke.out
@@ -2,8 +2,8 @@
1,0,99,"R",0,3
50,1,70,"R",0,1
100,0,15,"R",0,2
-115,0,285,"R",0,3
+115,0,-1,"[NULL]",0,3
120,1,50,"R",0,2
170,1,80,"R",0,0
250,1,140,"R",0,2
-390,1,10,"R",0,4
+390,1,-1,"[NULL]",0,4
diff --git a/test/trace_processor/smoke/thread_cpu_time.sql b/test/trace_processor/smoke/thread_cpu_time.sql
index 887af35..534e23e 100644
--- a/test/trace_processor/smoke/thread_cpu_time.sql
+++ b/test/trace_processor/smoke/thread_cpu_time.sql
@@ -26,5 +26,6 @@
from sched join thread using(utid)
group by upid
) using(upid)
+where total_dur != -1
group by utid, upid
order by total_dur desc, pid, tid
diff --git a/test/trace_processor/smoke/thread_cpu_time_example_android_trace_30s.out b/test/trace_processor/smoke/thread_cpu_time_example_android_trace_30s.out
index 63be1d6..21b1480 100644
--- a/test/trace_processor/smoke/thread_cpu_time_example_android_trace_30s.out
+++ b/test/trace_processor/smoke/thread_cpu_time_example_android_trace_30s.out
@@ -1,331 +1,195 @@
"tid","pid","threadName","processName","totalDur"
-2,2,"kthreadd","kthreadd",22857974895
-3,2,"ksoftirqd/0","kthreadd",22857974895
-4,2,"kworker/0:0","kthreadd",22857974895
-6,2,"kworker/u16:0","kthreadd",22857974895
-7,2,"rcu_preempt","kthreadd",22857974895
-8,2,"rcu_sched","kthreadd",22857974895
-10,2,"rcuop/0","kthreadd",22857974895
-11,2,"rcuos/0","kthreadd",22857974895
-13,2,"migration/0","kthreadd",22857974895
-14,2,"watchdog/0","kthreadd",22857974895
-15,2,"watchdog/1","kthreadd",22857974895
-16,2,"migration/1","kthreadd",22857974895
-17,2,"ksoftirqd/1","kthreadd",22857974895
-18,2,"kworker/1:0","kthreadd",22857974895
-20,2,"rcuop/1","kthreadd",22857974895
-21,2,"rcuos/1","kthreadd",22857974895
-23,2,"watchdog/2","kthreadd",22857974895
-24,2,"migration/2","kthreadd",22857974895
-25,2,"ksoftirqd/2","kthreadd",22857974895
-28,2,"rcuop/2","kthreadd",22857974895
-29,2,"rcuos/2","kthreadd",22857974895
-31,2,"watchdog/3","kthreadd",22857974895
-32,2,"migration/3","kthreadd",22857974895
-33,2,"ksoftirqd/3","kthreadd",22857974895
-34,2,"kworker/3:0","kthreadd",22857974895
-36,2,"rcuop/3","kthreadd",22857974895
-37,2,"rcuos/3","kthreadd",22857974895
-39,2,"watchdog/4","kthreadd",22857974895
-40,2,"migration/4","kthreadd",22857974895
-41,2,"ksoftirqd/4","kthreadd",22857974895
-42,2,"kworker/4:0","kthreadd",22857974895
-44,2,"rcuop/4","kthreadd",22857974895
-45,2,"rcuos/4","kthreadd",22857974895
-47,2,"watchdog/5","kthreadd",22857974895
-48,2,"migration/5","kthreadd",22857974895
-49,2,"ksoftirqd/5","kthreadd",22857974895
-52,2,"rcuop/5","kthreadd",22857974895
-53,2,"rcuos/5","kthreadd",22857974895
-55,2,"watchdog/6","kthreadd",22857974895
-56,2,"migration/6","kthreadd",22857974895
-57,2,"ksoftirqd/6","kthreadd",22857974895
-60,2,"rcuop/6","kthreadd",22857974895
-61,2,"rcuos/6","kthreadd",22857974895
-63,2,"watchdog/7","kthreadd",22857974895
-64,2,"migration/7","kthreadd",22857974895
-65,2,"ksoftirqd/7","kthreadd",22857974895
-66,2,"kworker/7:0","kthreadd",22857974895
-68,2,"rcuop/7","kthreadd",22857974895
-69,2,"rcuos/7","kthreadd",22857974895
-80,2,"kworker/0:1","kthreadd",22857974895
-81,2,"smem_native_mps","kthreadd",22857974895
-82,2,"mpss_smem_glink","kthreadd",22857974895
-83,2,"smem_native_lpa","kthreadd",22857974895
-84,2,"lpass_smem_glin","kthreadd",22857974895
-85,2,"smem_native_dsp","kthreadd",22857974895
-86,2,"dsps_smem_glink","kthreadd",22857974895
-87,2,"smem_native_rpm","kthreadd",22857974895
-91,2,"msm_watchdog","kthreadd",22857974895
-93,2,"kworker/u16:1","kthreadd",22857974895
-94,2,"irq/126-cpr3","kthreadd",22857974895
-105,2,"system","kthreadd",22857974895
-150,2,"kswapd0","kthreadd",22857974895
-188,2,"vsync_retire_wo","kthreadd",22857974895
-193,2,"spi_wdsp","kthreadd",22857974895
-194,2,"wdsp_spi_glink_","kthreadd",22857974895
-201,2,"kworker/4:1","kthreadd",22857974895
-215,2,"hwrng","kthreadd",22857974895
-217,2,"kworker/2:1","kthreadd",22857974895
-253,2,"kworker/3:1","kthreadd",22857974895
-292,2,"kgsl_worker_thr","kthreadd",22857974895
-321,2,"irq/286-soc:fp_","kthreadd",22857974895
-329,2,"kworker/5:1","kthreadd",22857974895
-330,2,"spi2","kthreadd",22857974895
-345,2,"irq/262-vl53l0_","kthreadd",22857974895
-360,2,"kworker/u16:6","kthreadd",22857974895
-368,2,"rot_commitq_0_0","kthreadd",22857974895
-370,2,"rot_doneq_0_0","kthreadd",22857974895
-372,2,"kworker/4:3","kthreadd",22857974895
-411,2,"kworker/1:1","kthreadd",22857974895
-415,2,"kworker/6:2","kthreadd",22857974895
-459,2,"irq/226-bcm1560","kthreadd",22857974895
-462,2,"kworker/u16:8","kthreadd",22857974895
-492,2,"irq/747-ima-rdy","kthreadd",22857974895
-520,2,"kworker/5:2","kthreadd",22857974895
-521,2,"set_state_work","kthreadd",22857974895
-522,2,"irq/227-mnh-rea","kthreadd",22857974895
-523,2,"irq/751-mnh_pci","kthreadd",22857974895
-524,2,"irq/752-mnh_pci","kthreadd",22857974895
-526,2,"irq/754-mnh_pci","kthreadd",22857974895
-528,2,"irq/758-mnh_pci","kthreadd",22857974895
-545,2,"kworker/6:1H","kthreadd",22857974895
-546,2,"kworker/4:1H","kthreadd",22857974895
-547,2,"kworker/7:1H","kthreadd",22857974895
-549,2,"kworker/5:1H","kthreadd",22857974895
-559,2,"kworker/0:1H","kthreadd",22857974895
-561,2,"kworker/u16:10","kthreadd",22857974895
-568,2,"irq/760-synapti","kthreadd",22857974895
-592,2,"sugov:0","kthreadd",22857974895
-593,2,"sugov:4","kthreadd",22857974895
-597,2,"kauditd","kthreadd",22857974895
-610,2,"wlan_logging_th","kthreadd",22857974895
-634,2,"kworker/1:3","kthreadd",22857974895
-640,2,"kworker/7:2","kthreadd",22857974895
-641,2,"jbd2/sda45-8","kthreadd",22857974895
-665,2,"kworker/0:3","kthreadd",22857974895
-667,2,"kworker/0:4","kthreadd",22857974895
-695,2,"msm_slim_qmi_cl","kthreadd",22857974895
-704,2,"kworker/5:3","kthreadd",22857974895
-737,2,"kworker/2:1H","kthreadd",22857974895
-738,2,"kworker/u16:11","kthreadd",22857974895
-739,2,"kworker/u16:12","kthreadd",22857974895
-756,2,"kworker/1:1H","kthreadd",22857974895
-807,2,"irq/254-wcd9xxx","kthreadd",22857974895
-829,2,"kworker/u16:13","kthreadd",22857974895
-860,2,"kworker/u16:14","kthreadd",22857974895
-872,2,"kworker/3:2","kthreadd",22857974895
-877,2,"kworker/u16:15","kthreadd",22857974895
-926,2,"kworker/3:1H","kthreadd",22857974895
-1055,2,"kworker/7:3","kthreadd",22857974895
-1084,2,"kworker/u17:1","kthreadd",22857974895
-1948,2,"kworker/2:2","kthreadd",22857974895
-2188,2,"cds_mc_thread","kthreadd",22857974895
-2189,2,"cds_ol_rx_threa","kthreadd",22857974895
-2287,2,"irq/35-1008000.","kthreadd",22857974895
-3776,2,"kworker/3:3","kthreadd",22857974895
-4494,2,"mdss_fb0","kthreadd",22857974895
-4795,2,"kworker/2:3","kthreadd",22857974895
-5492,2,"kworker/3:4","kthreadd",22857974895
-5745,2,"irq/163-arm-smm","kthreadd",22857974895
-5759,2,"irq/164-arm-smm","kthreadd",22857974895
-5778,2,"irq/165-arm-smm","kthreadd",22857974895
-5780,2,"ois_wq","kthreadd",22857974895
-5798,2,"rot_fenceq_0_0","kthreadd",22857974895
-5799,2,"irq/166-arm-smm","kthreadd",22857974895
-5800,2,"irq/167-arm-smm","kthreadd",22857974895
-5932,2,"mdss_fb0","kthreadd",22857974895
-5506,5506,"id.GoogleCamera","com.google.android.GoogleCamera",15154766434
-5511,5506,"Jit thread pool","com.google.android.GoogleCamera",15154766434
-5512,5506,"Signal Catcher","com.google.android.GoogleCamera",15154766434
-5513,5506,"ADB-JDWP Connec","com.google.android.GoogleCamera",15154766434
-5514,5506,"ReferenceQueueD","com.google.android.GoogleCamera",15154766434
-5515,5506,"FinalizerDaemon","com.google.android.GoogleCamera",15154766434
-5516,5506,"FinalizerWatchd","com.google.android.GoogleCamera",15154766434
-5517,5506,"HeapTaskDaemon","com.google.android.GoogleCamera",15154766434
-5518,5506,"Binder:5506_1","com.google.android.GoogleCamera",15154766434
-5519,5506,"Binder:5506_2","com.google.android.GoogleCamera",15154766434
-5520,5506,"Profile Saver","com.google.android.GoogleCamera",15154766434
-5522,5506,"GoogleApiHandle","com.google.android.GoogleCamera",15154766434
-5524,5506,"queued-work-loo","com.google.android.GoogleCamera",15154766434
-5525,5506,"Executor-1","com.google.android.GoogleCamera",15154766434
-5526,5506,"Executor-2","com.google.android.GoogleCamera",15154766434
-5527,5506,"Executor-3","com.google.android.GoogleCamera",15154766434
-5528,5506,"Executor-4","com.google.android.GoogleCamera",15154766434
-5529,5506,"IOExecutor-1","com.google.android.GoogleCamera",15154766434
-5530,5506,"IndicatorUpdate","com.google.android.GoogleCamera",15154766434
-5531,5506,"CamcorderCamera","com.google.android.GoogleCamera",15154766434
-5532,5506,"Thread-11","com.google.android.GoogleCamera",15154766434
-5533,5506,"Thread-12","com.google.android.GoogleCamera",15154766434
-5534,5506,"Thread-92","com.google.android.GoogleCamera",15154766434
-5536,5506,"Executor-5","com.google.android.GoogleCamera",15154766434
-5537,5506,"Executor-6","com.google.android.GoogleCamera",15154766434
-5538,5506,"RenderThread","com.google.android.GoogleCamera",15154766434
-5541,5506,"Executor-7","com.google.android.GoogleCamera",15154766434
-5557,5506,"RenderThread","com.google.android.GoogleCamera",15154766434
-5559,5506,"RenderThread","com.google.android.GoogleCamera",15154766434
-5595,5506,"Executor-8","com.google.android.GoogleCamera",15154766434
-5596,5506,"Camera-Hndlr","com.google.android.GoogleCamera",15154766434
-5597,5506,"SoundPool","com.google.android.GoogleCamera",15154766434
-5598,5506,"SoundPoolThread","com.google.android.GoogleCamera",15154766434
-5599,5506,"UsageStatEx","com.google.android.GoogleCamera",15154766434
-5600,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5601,5506,"HwBinder:5506_1","com.google.android.GoogleCamera",15154766434
-5604,5506,"Camera-Ex","com.google.android.GoogleCamera",15154766434
-5626,5506,"Camera Handler ","com.google.android.GoogleCamera",15154766434
-5632,5506,"Camera Job Disp","com.google.android.GoogleCamera",15154766434
-5634,5506,"Binder:5506_3","com.google.android.GoogleCamera",15154766434
-5641,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5648,5506,"camera.wearable","com.google.android.GoogleCamera",15154766434
-5649,5506,"CamcorderCamera","com.google.android.GoogleCamera",15154766434
-5650,5506,"Binder:5506_4","com.google.android.GoogleCamera",15154766434
-5651,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5654,5506,"IR-RAW10w4032","com.google.android.GoogleCamera",15154766434
-5655,5506,"Binder:5506_5","com.google.android.GoogleCamera",15154766434
-5657,5506,"MicrovideoFrame","com.google.android.GoogleCamera",15154766434
-5658,5506,"AsyncTask #1","com.google.android.GoogleCamera",15154766434
-5673,5506,"IR-YUV_420_888w","com.google.android.GoogleCamera",15154766434
-5674,5506,"IR-JPEGw4032","com.google.android.GoogleCamera",15154766434
-5675,5506,"reproc-write","com.google.android.GoogleCamera",15154766434
-5676,5506,"reproc-read","com.google.android.GoogleCamera",15154766434
-5679,5506,"CameraEx-1","com.google.android.GoogleCamera",15154766434
-5680,5506,"CameraEx-2","com.google.android.GoogleCamera",15154766434
-5681,5506,"MicrovideoQShar","com.google.android.GoogleCamera",15154766434
-5682,5506,"n.StateCallback","com.google.android.GoogleCamera",15154766434
-5684,5506,"mv-vid-encoder","com.google.android.GoogleCamera",15154766434
-5686,5506,"SharedPreferenc","com.google.android.GoogleCamera",15154766434
-5696,5506,"AsyncTask #2","com.google.android.GoogleCamera",15154766434
-5701,5506,"GcaMetadataHand","com.google.android.GoogleCamera",15154766434
-5702,5506,"r.ImageListener","com.google.android.GoogleCamera",15154766434
-5703,5506,"Binder:5506_6","com.google.android.GoogleCamera",15154766434
-5706,5506,"OnDemandLoader","com.google.android.GoogleCamera",15154766434
-5713,5506,"NotificationDot","com.google.android.GoogleCamera",15154766434
-5722,5506,"GAC_Executor[0]","com.google.android.GoogleCamera",15154766434
-5729,5506,"Timer-0","com.google.android.GoogleCamera",15154766434
-5732,5506,"GAC_Executor[1]","com.google.android.GoogleCamera",15154766434
-5733,5506,"Timer-1","com.google.android.GoogleCamera",15154766434
-5734,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5743,5506,"AsyncTask #3","com.google.android.GoogleCamera",15154766434
-5760,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5769,5506,"hwuiTask1","com.google.android.GoogleCamera",15154766434
-5772,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5775,5506,"Timer-2","com.google.android.GoogleCamera",15154766434
-5781,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5793,5506,"mv-ctrl-exec","com.google.android.GoogleCamera",15154766434
-5794,5506,"ois-exec","com.google.android.GoogleCamera",15154766434
-5795,5506,"mv-meta-exec","com.google.android.GoogleCamera",15154766434
-5796,5506,"mv-gyro-exec-0","com.google.android.GoogleCamera",15154766434
-5797,5506,"DelHDR+Ind","com.google.android.GoogleCamera",15154766434
-5801,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5804,5506,"FilterHDR+Ind","com.google.android.GoogleCamera",15154766434
-5805,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5808,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5811,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5814,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5817,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766434
-5824,5506,"CameraProcessin","com.google.android.GoogleCamera",15154766434
-5825,5506,"ProcServ","com.google.android.GoogleCamera",15154766434
-5826,5506,"MediaCodec_loop","com.google.android.GoogleCamera",15154766434
-5827,5506,"CodecLooper","com.google.android.GoogleCamera",15154766434
-5829,5506,"Binder:5506_7","com.google.android.GoogleCamera",15154766434
-5834,5506,"IOExecutor-2","com.google.android.GoogleCamera",15154766434
-5839,5506,"AudioTrack","com.google.android.GoogleCamera",15154766434
-5845,5506,"Thread-38","com.google.android.GoogleCamera",15154766434
-5847,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5848,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5849,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5850,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5851,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5852,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5853,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766434
-5865,5506,"AsyncTask #4","com.google.android.GoogleCamera",15154766434
-5869,5506,"glide-source-th","com.google.android.GoogleCamera",15154766434
-5870,5506,"Thread-72","com.google.android.GoogleCamera",15154766434
-5872,5506,"Thread-56","com.google.android.GoogleCamera",15154766434
-5873,5506,"Thread-49","com.google.android.GoogleCamera",15154766434
-5875,5506,"Thread-52","com.google.android.GoogleCamera",15154766434
-5876,5506,"Thread-66","com.google.android.GoogleCamera",15154766434
-5877,5506,"Thread-65","com.google.android.GoogleCamera",15154766434
-5878,5506,"Thread-61","com.google.android.GoogleCamera",15154766434
-5879,5506,"Thread-58","com.google.android.GoogleCamera",15154766434
-5923,5506,"DelLifetime","com.google.android.GoogleCamera",15154766434
-5938,5506,"Thread-91","com.google.android.GoogleCamera",15154766434
-5940,5506,"Finish Thread","com.google.android.GoogleCamera",15154766434
-5941,5506,"Finish Thread","com.google.android.GoogleCamera",15154766434
-5943,5506,"Thread-85","com.google.android.GoogleCamera",15154766434
-5944,5506,"Thread-80","com.google.android.GoogleCamera",15154766434
-5945,5506,"Thread-84","com.google.android.GoogleCamera",15154766434
-5946,5506,"Thread-79","com.google.android.GoogleCamera",15154766434
-5947,5506,"Thread-81","com.google.android.GoogleCamera",15154766434
-5948,5506,"Thread-83","com.google.android.GoogleCamera",15154766434
-5949,5506,"Thread-82","com.google.android.GoogleCamera",15154766434
-6011,5506,"mv-disk-writer","com.google.android.GoogleCamera",15154766434
-1204,1204,"system_server","system_server",6809850362
-1211,1204,"ReferenceQueueD","system_server",6809850362
-1212,1204,"FinalizerDaemon","system_server",6809850362
-1213,1204,"FinalizerWatchd","system_server",6809850362
-1214,1204,"HeapTaskDaemon","system_server",6809850362
-1216,1204,"Binder:1204_1","system_server",6809850362
-1246,1204,"android.io","system_server",6809850362
-1249,1204,"android.bg","system_server",6809850362
-1250,1204,"ActivityManager","system_server",6809850362
-1251,1204,"android.ui","system_server",6809850362
-1252,1204,"ActivityManager","system_server",6809850362
-1253,1204,"ActivityManager","system_server",6809850362
-1254,1204,"batterystats-wo","system_server",6809850362
-1255,1204,"FileObserver","system_server",6809850362
-1256,1204,"android.fg","system_server",6809850362
-1257,1204,"android.display","system_server",6809850362
-1259,1204,"PowerManagerSer","system_server",6809850362
-1260,1204,"HwBinder:1204_1","system_server",6809850362
-1363,1204,"android.anim","system_server",6809850362
-1364,1204,"android.anim.lf","system_server",6809850362
-1373,1204,"SensorEventAckR","system_server",6809850362
-1374,1204,"SensorService","system_server",6809850362
-1383,1204,"SettingsProvide","system_server",6809850362
-1396,1204,"AlarmManager","system_server",6809850362
-1419,1204,"UEventObserver","system_server",6809850362
-1420,1204,"InputDispatcher","system_server",6809850362
-1421,1204,"InputReader","system_server",6809850362
-1423,1204,"NetworkWatchlis","system_server",6809850362
-1441,1204,"NetdConnector","system_server",6809850362
-1444,1204,"NetworkStats","system_server",6809850362
-1445,1204,"NetworkPolicy","system_server",6809850362
-1446,1204,"tworkPolicy.uid","system_server",6809850362
-1453,1204,"WifiService","system_server",6809850362
-1454,1204,"ClientModeImpl","system_server",6809850362
-1460,1204,"WifiScanningSer","system_server",6809850362
-1463,1204,"ConnectivitySer","system_server",6809850362
-1468,1204,"notification-sq","system_server",6809850362
-1469,1204,"ranker","system_server",6809850362
-1480,1204,"AudioService","system_server",6809850362
-1489,1204,"HwBinder:1204_3","system_server",6809850362
-1492,1204,"ConnectivityThr","system_server",6809850362
-1516,1204,"wifiAwareServic","system_server",6809850362
-1517,1204,"EthernetService","system_server",6809850362
-1519,1204,"TaskSnapshotPer","system_server",6809850362
-1525,1204,"PhotonicModulat","system_server",6809850362
-1529,1204,"LazyTaskWriterT","system_server",6809850362
-1581,1204,"NetworkStatsObs","system_server",6809850362
-1597,1204,"watchdog","system_server",6809850362
-1648,1204,"NetworkTimeUpda","system_server",6809850362
-1699,1204,"Binder:1204_4","system_server",6809850362
-1700,1204,"Binder:1204_5","system_server",6809850362
-1739,1204,"hidl_ssvc_poll","system_server",6809850362
-2274,1204,"IpClient.wlan0","system_server",6809850362
-2381,1204,"backup","system_server",6809850362
-2483,1204,"Binder:1204_A","system_server",6809850362
-2688,1204,"Binder:1204_10","system_server",6809850362
-2692,1204,"Binder:1204_12","system_server",6809850362
-2695,1204,"Binder:1204_15","system_server",6809850362
-2697,1204,"Binder:1204_16","system_server",6809850362
-3342,1204,"pool-4-thread-1","system_server",6809850362
-3482,1204,"Binder:1204_17","system_server",6809850362
-4064,1204,"Binder:1204_18","system_server",6809850362
-4743,1204,"Binder:1204_1A","system_server",6809850362
-5332,1204,"GrallocUploadTh","system_server",6809850362
-5498,1204,"RenderThread","system_server",6809850362
-5499,1204,"RenderThread","system_server",6809850362
+5506,5506,"id.GoogleCamera","com.google.android.GoogleCamera",15154766430
+5511,5506,"Jit thread pool","com.google.android.GoogleCamera",15154766430
+5512,5506,"Signal Catcher","com.google.android.GoogleCamera",15154766430
+5513,5506,"ADB-JDWP Connec","com.google.android.GoogleCamera",15154766430
+5514,5506,"ReferenceQueueD","com.google.android.GoogleCamera",15154766430
+5515,5506,"FinalizerDaemon","com.google.android.GoogleCamera",15154766430
+5516,5506,"FinalizerWatchd","com.google.android.GoogleCamera",15154766430
+5517,5506,"HeapTaskDaemon","com.google.android.GoogleCamera",15154766430
+5518,5506,"Binder:5506_1","com.google.android.GoogleCamera",15154766430
+5519,5506,"Binder:5506_2","com.google.android.GoogleCamera",15154766430
+5520,5506,"Profile Saver","com.google.android.GoogleCamera",15154766430
+5522,5506,"GoogleApiHandle","com.google.android.GoogleCamera",15154766430
+5524,5506,"queued-work-loo","com.google.android.GoogleCamera",15154766430
+5525,5506,"Executor-1","com.google.android.GoogleCamera",15154766430
+5526,5506,"Executor-2","com.google.android.GoogleCamera",15154766430
+5527,5506,"Executor-3","com.google.android.GoogleCamera",15154766430
+5528,5506,"Executor-4","com.google.android.GoogleCamera",15154766430
+5529,5506,"IOExecutor-1","com.google.android.GoogleCamera",15154766430
+5530,5506,"IndicatorUpdate","com.google.android.GoogleCamera",15154766430
+5531,5506,"CamcorderCamera","com.google.android.GoogleCamera",15154766430
+5532,5506,"Thread-11","com.google.android.GoogleCamera",15154766430
+5533,5506,"Thread-12","com.google.android.GoogleCamera",15154766430
+5534,5506,"Thread-92","com.google.android.GoogleCamera",15154766430
+5536,5506,"Executor-5","com.google.android.GoogleCamera",15154766430
+5537,5506,"Executor-6","com.google.android.GoogleCamera",15154766430
+5538,5506,"RenderThread","com.google.android.GoogleCamera",15154766430
+5541,5506,"Executor-7","com.google.android.GoogleCamera",15154766430
+5557,5506,"RenderThread","com.google.android.GoogleCamera",15154766430
+5559,5506,"RenderThread","com.google.android.GoogleCamera",15154766430
+5595,5506,"Executor-8","com.google.android.GoogleCamera",15154766430
+5596,5506,"Camera-Hndlr","com.google.android.GoogleCamera",15154766430
+5597,5506,"SoundPool","com.google.android.GoogleCamera",15154766430
+5598,5506,"SoundPoolThread","com.google.android.GoogleCamera",15154766430
+5599,5506,"UsageStatEx","com.google.android.GoogleCamera",15154766430
+5600,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5601,5506,"HwBinder:5506_1","com.google.android.GoogleCamera",15154766430
+5604,5506,"Camera-Ex","com.google.android.GoogleCamera",15154766430
+5626,5506,"Camera Handler ","com.google.android.GoogleCamera",15154766430
+5632,5506,"Camera Job Disp","com.google.android.GoogleCamera",15154766430
+5634,5506,"Binder:5506_3","com.google.android.GoogleCamera",15154766430
+5641,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5648,5506,"camera.wearable","com.google.android.GoogleCamera",15154766430
+5649,5506,"CamcorderCamera","com.google.android.GoogleCamera",15154766430
+5650,5506,"Binder:5506_4","com.google.android.GoogleCamera",15154766430
+5651,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5654,5506,"IR-RAW10w4032","com.google.android.GoogleCamera",15154766430
+5655,5506,"Binder:5506_5","com.google.android.GoogleCamera",15154766430
+5657,5506,"MicrovideoFrame","com.google.android.GoogleCamera",15154766430
+5658,5506,"AsyncTask #1","com.google.android.GoogleCamera",15154766430
+5673,5506,"IR-YUV_420_888w","com.google.android.GoogleCamera",15154766430
+5674,5506,"IR-JPEGw4032","com.google.android.GoogleCamera",15154766430
+5675,5506,"reproc-write","com.google.android.GoogleCamera",15154766430
+5676,5506,"reproc-read","com.google.android.GoogleCamera",15154766430
+5679,5506,"CameraEx-1","com.google.android.GoogleCamera",15154766430
+5680,5506,"CameraEx-2","com.google.android.GoogleCamera",15154766430
+5681,5506,"MicrovideoQShar","com.google.android.GoogleCamera",15154766430
+5682,5506,"n.StateCallback","com.google.android.GoogleCamera",15154766430
+5684,5506,"mv-vid-encoder","com.google.android.GoogleCamera",15154766430
+5686,5506,"SharedPreferenc","com.google.android.GoogleCamera",15154766430
+5696,5506,"AsyncTask #2","com.google.android.GoogleCamera",15154766430
+5701,5506,"GcaMetadataHand","com.google.android.GoogleCamera",15154766430
+5702,5506,"r.ImageListener","com.google.android.GoogleCamera",15154766430
+5703,5506,"Binder:5506_6","com.google.android.GoogleCamera",15154766430
+5706,5506,"OnDemandLoader","com.google.android.GoogleCamera",15154766430
+5713,5506,"NotificationDot","com.google.android.GoogleCamera",15154766430
+5722,5506,"GAC_Executor[0]","com.google.android.GoogleCamera",15154766430
+5729,5506,"Timer-0","com.google.android.GoogleCamera",15154766430
+5732,5506,"GAC_Executor[1]","com.google.android.GoogleCamera",15154766430
+5733,5506,"Timer-1","com.google.android.GoogleCamera",15154766430
+5734,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5743,5506,"AsyncTask #3","com.google.android.GoogleCamera",15154766430
+5760,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5769,5506,"hwuiTask1","com.google.android.GoogleCamera",15154766430
+5772,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5775,5506,"Timer-2","com.google.android.GoogleCamera",15154766430
+5781,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5793,5506,"mv-ctrl-exec","com.google.android.GoogleCamera",15154766430
+5794,5506,"ois-exec","com.google.android.GoogleCamera",15154766430
+5795,5506,"mv-meta-exec","com.google.android.GoogleCamera",15154766430
+5796,5506,"mv-gyro-exec-0","com.google.android.GoogleCamera",15154766430
+5797,5506,"DelHDR+Ind","com.google.android.GoogleCamera",15154766430
+5801,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5804,5506,"FilterHDR+Ind","com.google.android.GoogleCamera",15154766430
+5805,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5808,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5811,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5814,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5817,5506,"NDK MediaCodec_","com.google.android.GoogleCamera",15154766430
+5824,5506,"CameraProcessin","com.google.android.GoogleCamera",15154766430
+5825,5506,"ProcServ","com.google.android.GoogleCamera",15154766430
+5826,5506,"MediaCodec_loop","com.google.android.GoogleCamera",15154766430
+5827,5506,"CodecLooper","com.google.android.GoogleCamera",15154766430
+5829,5506,"Binder:5506_7","com.google.android.GoogleCamera",15154766430
+5834,5506,"IOExecutor-2","com.google.android.GoogleCamera",15154766430
+5839,5506,"AudioTrack","com.google.android.GoogleCamera",15154766430
+5845,5506,"Thread-38","com.google.android.GoogleCamera",15154766430
+5847,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5848,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5849,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5850,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5851,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5852,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5853,5506,"Capture tasks: ","com.google.android.GoogleCamera",15154766430
+5865,5506,"AsyncTask #4","com.google.android.GoogleCamera",15154766430
+5869,5506,"glide-source-th","com.google.android.GoogleCamera",15154766430
+5870,5506,"Thread-72","com.google.android.GoogleCamera",15154766430
+5872,5506,"Thread-56","com.google.android.GoogleCamera",15154766430
+5873,5506,"Thread-49","com.google.android.GoogleCamera",15154766430
+5875,5506,"Thread-52","com.google.android.GoogleCamera",15154766430
+5876,5506,"Thread-66","com.google.android.GoogleCamera",15154766430
+5877,5506,"Thread-65","com.google.android.GoogleCamera",15154766430
+5878,5506,"Thread-61","com.google.android.GoogleCamera",15154766430
+5879,5506,"Thread-58","com.google.android.GoogleCamera",15154766430
+5923,5506,"DelLifetime","com.google.android.GoogleCamera",15154766430
+5938,5506,"Thread-91","com.google.android.GoogleCamera",15154766430
+5940,5506,"Finish Thread","com.google.android.GoogleCamera",15154766430
+5941,5506,"Finish Thread","com.google.android.GoogleCamera",15154766430
+5943,5506,"Thread-85","com.google.android.GoogleCamera",15154766430
+5944,5506,"Thread-80","com.google.android.GoogleCamera",15154766430
+5945,5506,"Thread-84","com.google.android.GoogleCamera",15154766430
+5946,5506,"Thread-79","com.google.android.GoogleCamera",15154766430
+5947,5506,"Thread-81","com.google.android.GoogleCamera",15154766430
+5948,5506,"Thread-83","com.google.android.GoogleCamera",15154766430
+5949,5506,"Thread-82","com.google.android.GoogleCamera",15154766430
+6011,5506,"mv-disk-writer","com.google.android.GoogleCamera",15154766430
+1204,1204,"system_server","system_server",6809850360
+1211,1204,"ReferenceQueueD","system_server",6809850360
+1212,1204,"FinalizerDaemon","system_server",6809850360
+1213,1204,"FinalizerWatchd","system_server",6809850360
+1214,1204,"HeapTaskDaemon","system_server",6809850360
+1216,1204,"Binder:1204_1","system_server",6809850360
+1246,1204,"android.io","system_server",6809850360
+1249,1204,"android.bg","system_server",6809850360
+1250,1204,"ActivityManager","system_server",6809850360
+1251,1204,"android.ui","system_server",6809850360
+1252,1204,"ActivityManager","system_server",6809850360
+1253,1204,"ActivityManager","system_server",6809850360
+1254,1204,"batterystats-wo","system_server",6809850360
+1255,1204,"FileObserver","system_server",6809850360
+1256,1204,"android.fg","system_server",6809850360
+1257,1204,"android.display","system_server",6809850360
+1259,1204,"PowerManagerSer","system_server",6809850360
+1260,1204,"HwBinder:1204_1","system_server",6809850360
+1363,1204,"android.anim","system_server",6809850360
+1364,1204,"android.anim.lf","system_server",6809850360
+1373,1204,"SensorEventAckR","system_server",6809850360
+1374,1204,"SensorService","system_server",6809850360
+1383,1204,"SettingsProvide","system_server",6809850360
+1396,1204,"AlarmManager","system_server",6809850360
+1419,1204,"UEventObserver","system_server",6809850360
+1420,1204,"InputDispatcher","system_server",6809850360
+1421,1204,"InputReader","system_server",6809850360
+1423,1204,"NetworkWatchlis","system_server",6809850360
+1441,1204,"NetdConnector","system_server",6809850360
+1444,1204,"NetworkStats","system_server",6809850360
+1445,1204,"NetworkPolicy","system_server",6809850360
+1446,1204,"tworkPolicy.uid","system_server",6809850360
+1453,1204,"WifiService","system_server",6809850360
+1454,1204,"ClientModeImpl","system_server",6809850360
+1460,1204,"WifiScanningSer","system_server",6809850360
+1463,1204,"ConnectivitySer","system_server",6809850360
+1468,1204,"notification-sq","system_server",6809850360
+1469,1204,"ranker","system_server",6809850360
+1480,1204,"AudioService","system_server",6809850360
+1489,1204,"HwBinder:1204_3","system_server",6809850360
+1492,1204,"ConnectivityThr","system_server",6809850360
+1516,1204,"wifiAwareServic","system_server",6809850360
+1517,1204,"EthernetService","system_server",6809850360
+1519,1204,"TaskSnapshotPer","system_server",6809850360
+1525,1204,"PhotonicModulat","system_server",6809850360
+1529,1204,"LazyTaskWriterT","system_server",6809850360
+1581,1204,"NetworkStatsObs","system_server",6809850360
+1597,1204,"watchdog","system_server",6809850360
+1648,1204,"NetworkTimeUpda","system_server",6809850360
+1699,1204,"Binder:1204_4","system_server",6809850360
+1700,1204,"Binder:1204_5","system_server",6809850360
+1739,1204,"hidl_ssvc_poll","system_server",6809850360
+2274,1204,"IpClient.wlan0","system_server",6809850360
+2381,1204,"backup","system_server",6809850360
+2483,1204,"Binder:1204_A","system_server",6809850360
+2688,1204,"Binder:1204_10","system_server",6809850360
+2692,1204,"Binder:1204_12","system_server",6809850360
+2695,1204,"Binder:1204_15","system_server",6809850360
+2697,1204,"Binder:1204_16","system_server",6809850360
+3342,1204,"pool-4-thread-1","system_server",6809850360
+3482,1204,"Binder:1204_17","system_server",6809850360
+4064,1204,"Binder:1204_18","system_server",6809850360
+4743,1204,"Binder:1204_1A","system_server",6809850360
+5332,1204,"GrallocUploadTh","system_server",6809850360
+5498,1204,"RenderThread","system_server",6809850360
+5499,1204,"RenderThread","system_server",6809850360
5313,5313,".android.chrome","com.android.chrome",5125412570
5318,5313,"Jit thread pool","com.android.chrome",5125412570
5319,5313,"Signal Catcher","com.android.chrome",5125412570
@@ -375,6 +239,142 @@
5502,5313,"TaskSchedulerFo","com.android.chrome",5125412570
5503,5313,"TaskSchedulerFo","com.android.chrome",5125412570
5935,5313,"Binder:5313_5","com.android.chrome",5125412570
+2,2,"kthreadd","kthreadd",5068681085
+3,2,"ksoftirqd/0","kthreadd",5068681085
+4,2,"kworker/0:0","kthreadd",5068681085
+6,2,"kworker/u16:0","kthreadd",5068681085
+7,2,"rcu_preempt","kthreadd",5068681085
+8,2,"rcu_sched","kthreadd",5068681085
+10,2,"rcuop/0","kthreadd",5068681085
+11,2,"rcuos/0","kthreadd",5068681085
+13,2,"migration/0","kthreadd",5068681085
+14,2,"watchdog/0","kthreadd",5068681085
+15,2,"watchdog/1","kthreadd",5068681085
+16,2,"migration/1","kthreadd",5068681085
+17,2,"ksoftirqd/1","kthreadd",5068681085
+18,2,"kworker/1:0","kthreadd",5068681085
+20,2,"rcuop/1","kthreadd",5068681085
+21,2,"rcuos/1","kthreadd",5068681085
+23,2,"watchdog/2","kthreadd",5068681085
+24,2,"migration/2","kthreadd",5068681085
+25,2,"ksoftirqd/2","kthreadd",5068681085
+28,2,"rcuop/2","kthreadd",5068681085
+29,2,"rcuos/2","kthreadd",5068681085
+31,2,"watchdog/3","kthreadd",5068681085
+32,2,"migration/3","kthreadd",5068681085
+33,2,"ksoftirqd/3","kthreadd",5068681085
+34,2,"kworker/3:0","kthreadd",5068681085
+36,2,"rcuop/3","kthreadd",5068681085
+37,2,"rcuos/3","kthreadd",5068681085
+39,2,"watchdog/4","kthreadd",5068681085
+40,2,"migration/4","kthreadd",5068681085
+41,2,"ksoftirqd/4","kthreadd",5068681085
+42,2,"kworker/4:0","kthreadd",5068681085
+44,2,"rcuop/4","kthreadd",5068681085
+45,2,"rcuos/4","kthreadd",5068681085
+47,2,"watchdog/5","kthreadd",5068681085
+48,2,"migration/5","kthreadd",5068681085
+49,2,"ksoftirqd/5","kthreadd",5068681085
+52,2,"rcuop/5","kthreadd",5068681085
+53,2,"rcuos/5","kthreadd",5068681085
+55,2,"watchdog/6","kthreadd",5068681085
+56,2,"migration/6","kthreadd",5068681085
+57,2,"ksoftirqd/6","kthreadd",5068681085
+60,2,"rcuop/6","kthreadd",5068681085
+61,2,"rcuos/6","kthreadd",5068681085
+63,2,"watchdog/7","kthreadd",5068681085
+64,2,"migration/7","kthreadd",5068681085
+65,2,"ksoftirqd/7","kthreadd",5068681085
+66,2,"kworker/7:0","kthreadd",5068681085
+68,2,"rcuop/7","kthreadd",5068681085
+69,2,"rcuos/7","kthreadd",5068681085
+80,2,"kworker/0:1","kthreadd",5068681085
+81,2,"smem_native_mps","kthreadd",5068681085
+82,2,"mpss_smem_glink","kthreadd",5068681085
+83,2,"smem_native_lpa","kthreadd",5068681085
+84,2,"lpass_smem_glin","kthreadd",5068681085
+85,2,"smem_native_dsp","kthreadd",5068681085
+86,2,"dsps_smem_glink","kthreadd",5068681085
+87,2,"smem_native_rpm","kthreadd",5068681085
+91,2,"msm_watchdog","kthreadd",5068681085
+93,2,"kworker/u16:1","kthreadd",5068681085
+94,2,"irq/126-cpr3","kthreadd",5068681085
+105,2,"system","kthreadd",5068681085
+150,2,"kswapd0","kthreadd",5068681085
+188,2,"vsync_retire_wo","kthreadd",5068681085
+193,2,"spi_wdsp","kthreadd",5068681085
+194,2,"wdsp_spi_glink_","kthreadd",5068681085
+201,2,"kworker/4:1","kthreadd",5068681085
+215,2,"hwrng","kthreadd",5068681085
+217,2,"kworker/2:1","kthreadd",5068681085
+253,2,"kworker/3:1","kthreadd",5068681085
+292,2,"kgsl_worker_thr","kthreadd",5068681085
+321,2,"irq/286-soc:fp_","kthreadd",5068681085
+329,2,"kworker/5:1","kthreadd",5068681085
+330,2,"spi2","kthreadd",5068681085
+345,2,"irq/262-vl53l0_","kthreadd",5068681085
+360,2,"kworker/u16:6","kthreadd",5068681085
+368,2,"rot_commitq_0_0","kthreadd",5068681085
+370,2,"rot_doneq_0_0","kthreadd",5068681085
+372,2,"kworker/4:3","kthreadd",5068681085
+411,2,"kworker/1:1","kthreadd",5068681085
+415,2,"kworker/6:2","kthreadd",5068681085
+459,2,"irq/226-bcm1560","kthreadd",5068681085
+462,2,"kworker/u16:8","kthreadd",5068681085
+492,2,"irq/747-ima-rdy","kthreadd",5068681085
+520,2,"kworker/5:2","kthreadd",5068681085
+521,2,"set_state_work","kthreadd",5068681085
+522,2,"irq/227-mnh-rea","kthreadd",5068681085
+523,2,"irq/751-mnh_pci","kthreadd",5068681085
+524,2,"irq/752-mnh_pci","kthreadd",5068681085
+526,2,"irq/754-mnh_pci","kthreadd",5068681085
+528,2,"irq/758-mnh_pci","kthreadd",5068681085
+545,2,"kworker/6:1H","kthreadd",5068681085
+546,2,"kworker/4:1H","kthreadd",5068681085
+547,2,"kworker/7:1H","kthreadd",5068681085
+549,2,"kworker/5:1H","kthreadd",5068681085
+559,2,"kworker/0:1H","kthreadd",5068681085
+561,2,"kworker/u16:10","kthreadd",5068681085
+568,2,"irq/760-synapti","kthreadd",5068681085
+592,2,"sugov:0","kthreadd",5068681085
+593,2,"sugov:4","kthreadd",5068681085
+597,2,"kauditd","kthreadd",5068681085
+610,2,"wlan_logging_th","kthreadd",5068681085
+634,2,"kworker/1:3","kthreadd",5068681085
+640,2,"kworker/7:2","kthreadd",5068681085
+641,2,"jbd2/sda45-8","kthreadd",5068681085
+665,2,"kworker/0:3","kthreadd",5068681085
+667,2,"kworker/0:4","kthreadd",5068681085
+695,2,"msm_slim_qmi_cl","kthreadd",5068681085
+704,2,"kworker/5:3","kthreadd",5068681085
+737,2,"kworker/2:1H","kthreadd",5068681085
+738,2,"kworker/u16:11","kthreadd",5068681085
+739,2,"kworker/u16:12","kthreadd",5068681085
+756,2,"kworker/1:1H","kthreadd",5068681085
+807,2,"irq/254-wcd9xxx","kthreadd",5068681085
+829,2,"kworker/u16:13","kthreadd",5068681085
+860,2,"kworker/u16:14","kthreadd",5068681085
+872,2,"kworker/3:2","kthreadd",5068681085
+877,2,"kworker/u16:15","kthreadd",5068681085
+926,2,"kworker/3:1H","kthreadd",5068681085
+1055,2,"kworker/7:3","kthreadd",5068681085
+1084,2,"kworker/u17:1","kthreadd",5068681085
+1948,2,"kworker/2:2","kthreadd",5068681085
+2188,2,"cds_mc_thread","kthreadd",5068681085
+2189,2,"cds_ol_rx_threa","kthreadd",5068681085
+2287,2,"irq/35-1008000.","kthreadd",5068681085
+3776,2,"kworker/3:3","kthreadd",5068681085
+4494,2,"mdss_fb0","kthreadd",5068681085
+4795,2,"kworker/2:3","kthreadd",5068681085
+5492,2,"kworker/3:4","kthreadd",5068681085
+5745,2,"irq/163-arm-smm","kthreadd",5068681085
+5759,2,"irq/164-arm-smm","kthreadd",5068681085
+5778,2,"irq/165-arm-smm","kthreadd",5068681085
+5780,2,"ois_wq","kthreadd",5068681085
+5798,2,"rot_fenceq_0_0","kthreadd",5068681085
+5799,2,"irq/166-arm-smm","kthreadd",5068681085
+5800,2,"irq/167-arm-smm","kthreadd",5068681085
+5932,2,"mdss_fb0","kthreadd",5068681085
5348,5348,"dboxed_process0","com.android.chrome:sandboxed_process0",3569713072
5353,5348,"Jit thread pool","com.android.chrome:sandboxed_process0",3569713072
5354,5348,"Signal Catcher","com.android.chrome:sandboxed_process0",3569713072
@@ -404,100 +404,100 @@
5455,5348,"ScriptStreamer ","com.android.chrome:sandboxed_process0",3569713072
5462,5348,"Media","com.android.chrome:sandboxed_process0",3569713072
5475,5348,"AudioOutputDevi","com.android.chrome:sandboxed_process0",3569713072
-759,759,"provider@2.4-se","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-1543,759,"CAM_imgTh","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-1696,759,"provider@2.4-se","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-1926,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5606,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5607,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5608,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5609,759,"QCamera3HdrPlus","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5610,759,"CAM_MctServ","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5611,759,"CAM_MctBus","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5614,759,"CAM_sensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5617,759,"CAM_iface_ses","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5620,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5621,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5622,759,"CAM_cpp","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5623,759,"CAM_isp_trigger","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5624,759,"CAM_c2d","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5625,759,"CAM_hw_update","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5627,759,"CAM_isp_parser","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5628,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5629,759,"CAM_gyro_sens","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5630,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5631,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5633,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5635,759,"CAM_AECAWB","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5636,759,"CAM_AF","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5637,759,"CAM_AFD","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5638,759,"CAM_ASD","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5639,759,"CAM_Dispatch","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5640,759,"CAM_evntPoll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5644,759,"CAM_dataPoll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5704,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5705,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5707,759,"mm_jpeg_thread","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5708,759,"OMX_ImgEnc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5709,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5710,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5711,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5719,759,"CAM_img","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5720,759,"CAM_img","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5721,759,"CAM_METADATA","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5723,759,"CAM_ANALYSISCAM","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5724,759,"CAM_PREVIEW","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5725,759,"CAM_SNAPSHOT","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5726,759,"CAM_CALLBACK","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5727,759,"CAM_CALLBACK","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5728,759,"CAM_RAW","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5730,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5731,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5742,759,"CAM_iface_poll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5744,759,"CAM_iface_hw","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5752,759,"HwBinder:759_2","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5756,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5757,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5758,759,"CAM_laser_sens","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5762,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5765,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5766,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5767,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5768,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5770,759,"HwBinder:759_3","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5776,759,"CAM_sof_timer","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-5862,759,"HwBinder:759_4","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433441
-1572,1572,"ndroid.systemui","com.android.systemui",3072242745
-1580,1572,"Jit thread pool","com.android.systemui",3072242745
-1584,1572,"ReferenceQueueD","com.android.systemui",3072242745
-1585,1572,"FinalizerDaemon","com.android.systemui",3072242745
-1586,1572,"FinalizerWatchd","com.android.systemui",3072242745
-1587,1572,"HeapTaskDaemon","com.android.systemui",3072242745
-1589,1572,"Binder:1572_1","com.android.systemui",3072242745
-1593,1572,"Binder:1572_2","com.android.systemui",3072242745
-1876,1572,"pool-1-thread-1","com.android.systemui",3072242745
-1932,1572,"VolumeDialogCon","com.android.systemui",3072242745
-1934,1572,"SysUiBg","com.android.systemui",3072242745
-1981,1572,"RenderThread","com.android.systemui",3072242745
-1994,1572,"ConnectivityThr","com.android.systemui",3072242745
-2002,1572,"AsyncTask #1","com.android.systemui",3072242745
-2021,1572,"async_sensor","com.android.systemui",3072242745
-2044,1572,"Binder:1572_5","com.android.systemui",3072242745
-2059,1572,"FlashlightContr","com.android.systemui",3072242745
-2079,1572,"Binder:1572_7","com.android.systemui",3072242745
-2090,1572,"recents.fg","com.android.systemui",3072242745
-2121,1572,"ScreenDecoratio","com.android.systemui",3072242745
-2256,1572,"GrallocUploadTh","com.android.systemui",3072242745
-2270,1572,"hwuiTask1","com.android.systemui",3072242745
-2275,1572,"Thread-2","com.android.systemui",3072242745
-2285,1572,"Binder:1572_8","com.android.systemui",3072242745
-5155,1572,"AsyncTask #6","com.android.systemui",3072242745
-5486,1572,"AsyncTask #7","com.android.systemui",3072242745
-5487,1572,"AsyncTask #8","com.android.systemui",3072242745
-5488,1572,"InflaterThread ","com.android.systemui",3072242745
-5489,1572,"InflaterThread ","com.android.systemui",3072242745
-5490,1572,"InflaterThread ","com.android.systemui",3072242745
-5493,1572,"InflaterThread ","com.android.systemui",3072242745
+759,759,"provider@2.4-se","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+1543,759,"CAM_imgTh","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+1696,759,"provider@2.4-se","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+1926,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5606,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5607,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5608,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5609,759,"QCamera3HdrPlus","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5610,759,"CAM_MctServ","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5611,759,"CAM_MctBus","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5614,759,"CAM_sensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5617,759,"CAM_iface_ses","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5620,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5621,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5622,759,"CAM_cpp","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5623,759,"CAM_isp_trigger","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5624,759,"CAM_c2d","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5625,759,"CAM_hw_update","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5627,759,"CAM_isp_parser","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5628,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5629,759,"CAM_gyro_sens","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5630,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5631,759,"CAM_startsensor","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5633,759,"CAM_img_msg","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5635,759,"CAM_AECAWB","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5636,759,"CAM_AF","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5637,759,"CAM_AFD","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5638,759,"CAM_ASD","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5639,759,"CAM_Dispatch","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5640,759,"CAM_evntPoll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5644,759,"CAM_dataPoll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5704,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5705,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5707,759,"mm_jpeg_thread","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5708,759,"OMX_ImgEnc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5709,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5710,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5711,759,"cam_data_proc","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5719,759,"CAM_img","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5720,759,"CAM_img","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5721,759,"CAM_METADATA","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5723,759,"CAM_ANALYSISCAM","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5724,759,"CAM_PREVIEW","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5725,759,"CAM_SNAPSHOT","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5726,759,"CAM_CALLBACK","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5727,759,"CAM_CALLBACK","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5728,759,"CAM_RAW","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5730,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5731,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5742,759,"CAM_iface_poll","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5744,759,"CAM_iface_hw","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5752,759,"HwBinder:759_2","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5756,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5757,759,"HwBinder:759_1","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5758,759,"CAM_laser_sens","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5762,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5765,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5766,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5767,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5768,759,"CAM_StrmAppDat","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5770,759,"HwBinder:759_3","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5776,759,"CAM_sof_timer","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+5862,759,"HwBinder:759_4","/vendor/bin/hw/android.hardware.camera.provider@2.4-service",3337433438
+1572,1572,"ndroid.systemui","com.android.systemui",3072242741
+1580,1572,"Jit thread pool","com.android.systemui",3072242741
+1584,1572,"ReferenceQueueD","com.android.systemui",3072242741
+1585,1572,"FinalizerDaemon","com.android.systemui",3072242741
+1586,1572,"FinalizerWatchd","com.android.systemui",3072242741
+1587,1572,"HeapTaskDaemon","com.android.systemui",3072242741
+1589,1572,"Binder:1572_1","com.android.systemui",3072242741
+1593,1572,"Binder:1572_2","com.android.systemui",3072242741
+1876,1572,"pool-1-thread-1","com.android.systemui",3072242741
+1932,1572,"VolumeDialogCon","com.android.systemui",3072242741
+1934,1572,"SysUiBg","com.android.systemui",3072242741
+1981,1572,"RenderThread","com.android.systemui",3072242741
+1994,1572,"ConnectivityThr","com.android.systemui",3072242741
+2002,1572,"AsyncTask #1","com.android.systemui",3072242741
+2021,1572,"async_sensor","com.android.systemui",3072242741
+2044,1572,"Binder:1572_5","com.android.systemui",3072242741
+2059,1572,"FlashlightContr","com.android.systemui",3072242741
+2079,1572,"Binder:1572_7","com.android.systemui",3072242741
+2090,1572,"recents.fg","com.android.systemui",3072242741
+2121,1572,"ScreenDecoratio","com.android.systemui",3072242741
+2256,1572,"GrallocUploadTh","com.android.systemui",3072242741
+2270,1572,"hwuiTask1","com.android.systemui",3072242741
+2275,1572,"Thread-2","com.android.systemui",3072242741
+2285,1572,"Binder:1572_8","com.android.systemui",3072242741
+5155,1572,"AsyncTask #6","com.android.systemui",3072242741
+5486,1572,"AsyncTask #7","com.android.systemui",3072242741
+5487,1572,"AsyncTask #8","com.android.systemui",3072242741
+5488,1572,"InflaterThread ","com.android.systemui",3072242741
+5489,1572,"InflaterThread ","com.android.systemui",3072242741
+5490,1572,"InflaterThread ","com.android.systemui",3072242741
+5493,1572,"InflaterThread ","com.android.systemui",3072242741
2400,2400,"earchbox:search","com.google.android.googlequicksearchbox:search",2487567838
2428,2400,"Jit thread pool","com.google.android.googlequicksearchbox:search",2487567838
2442,2400,"ReferenceQueueD","com.google.android.googlequicksearchbox:search",2487567838
@@ -544,31 +544,31 @@
5491,2400,"TaskSchedulerFo","com.google.android.googlequicksearchbox:search",2487567838
5539,2400,"TaskSchedulerBa","com.google.android.googlequicksearchbox:search",2487567838
5540,2400,"TaskSchedulerFo","com.google.android.googlequicksearchbox:search",2487567838
-5377,5377,"ileged_process0","com.android.chrome:privileged_process0",2338957110
-5384,5377,"Jit thread pool","com.android.chrome:privileged_process0",2338957110
-5385,5377,"Signal Catcher","com.android.chrome:privileged_process0",2338957110
-5386,5377,"ADB-JDWP Connec","com.android.chrome:privileged_process0",2338957110
-5387,5377,"ReferenceQueueD","com.android.chrome:privileged_process0",2338957110
-5388,5377,"FinalizerDaemon","com.android.chrome:privileged_process0",2338957110
-5389,5377,"FinalizerWatchd","com.android.chrome:privileged_process0",2338957110
-5390,5377,"HeapTaskDaemon","com.android.chrome:privileged_process0",2338957110
-5391,5377,"Binder:5377_1","com.android.chrome:privileged_process0",2338957110
-5392,5377,"Binder:5377_2","com.android.chrome:privileged_process0",2338957110
-5393,5377,"Binder:5377_3","com.android.chrome:privileged_process0",2338957110
-5394,5377,"Profile Saver","com.android.chrome:privileged_process0",2338957110
-5395,5377,"CrGpuMain","com.android.chrome:privileged_process0",2338957110
-5397,5377,"Watchdog","com.android.chrome:privileged_process0",2338957110
-5409,5377,"TaskSchedulerSe","com.android.chrome:privileged_process0",2338957110
-5410,5377,"TaskSchedulerFo","com.android.chrome:privileged_process0",2338957110
-5411,5377,"TaskSchedulerFo","com.android.chrome:privileged_process0",2338957110
-5412,5377,"Chrome_ChildIOT","com.android.chrome:privileged_process0",2338957110
-5463,5377,"CrGpuMain","com.android.chrome:privileged_process0",2338957110
-5464,5377,"TaskSchedulerSi","com.android.chrome:privileged_process0",2338957110
-5476,5377,"AVDAAutoThread","com.android.chrome:privileged_process0",2338957110
-5477,5377,"AVDASWThread","com.android.chrome:privileged_process0",2338957110
-5478,5377,"MediaCodec_loop","com.android.chrome:privileged_process0",2338957110
-5479,5377,"JNISurfaceTextu","com.android.chrome:privileged_process0",2338957110
-5480,5377,"HwBinder:5377_1","com.android.chrome:privileged_process0",2338957110
+5377,5377,"ileged_process0","com.android.chrome:privileged_process0",2338957109
+5384,5377,"Jit thread pool","com.android.chrome:privileged_process0",2338957109
+5385,5377,"Signal Catcher","com.android.chrome:privileged_process0",2338957109
+5386,5377,"ADB-JDWP Connec","com.android.chrome:privileged_process0",2338957109
+5387,5377,"ReferenceQueueD","com.android.chrome:privileged_process0",2338957109
+5388,5377,"FinalizerDaemon","com.android.chrome:privileged_process0",2338957109
+5389,5377,"FinalizerWatchd","com.android.chrome:privileged_process0",2338957109
+5390,5377,"HeapTaskDaemon","com.android.chrome:privileged_process0",2338957109
+5391,5377,"Binder:5377_1","com.android.chrome:privileged_process0",2338957109
+5392,5377,"Binder:5377_2","com.android.chrome:privileged_process0",2338957109
+5393,5377,"Binder:5377_3","com.android.chrome:privileged_process0",2338957109
+5394,5377,"Profile Saver","com.android.chrome:privileged_process0",2338957109
+5395,5377,"CrGpuMain","com.android.chrome:privileged_process0",2338957109
+5397,5377,"Watchdog","com.android.chrome:privileged_process0",2338957109
+5409,5377,"TaskSchedulerSe","com.android.chrome:privileged_process0",2338957109
+5410,5377,"TaskSchedulerFo","com.android.chrome:privileged_process0",2338957109
+5411,5377,"TaskSchedulerFo","com.android.chrome:privileged_process0",2338957109
+5412,5377,"Chrome_ChildIOT","com.android.chrome:privileged_process0",2338957109
+5463,5377,"CrGpuMain","com.android.chrome:privileged_process0",2338957109
+5464,5377,"TaskSchedulerSi","com.android.chrome:privileged_process0",2338957109
+5476,5377,"AVDAAutoThread","com.android.chrome:privileged_process0",2338957109
+5477,5377,"AVDASWThread","com.android.chrome:privileged_process0",2338957109
+5478,5377,"MediaCodec_loop","com.android.chrome:privileged_process0",2338957109
+5479,5377,"JNISurfaceTextu","com.android.chrome:privileged_process0",2338957109
+5480,5377,"HwBinder:5377_1","com.android.chrome:privileged_process0",2338957109
622,622,"surfaceflinger","/system/bin/surfaceflinger",2155181851
651,622,"Binder:622_1","/system/bin/surfaceflinger",2155181851
652,622,"Binder:622_2","/system/bin/surfaceflinger",2155181851
@@ -581,8 +581,6 @@
1438,622,"Binder:622_4","/system/bin/surfaceflinger",2155181851
4032,622,"Binder:622_5","/system/bin/surfaceflinger",2155181851
5497,622,"surfaceflinger","/system/bin/surfaceflinger",2155181851
-834,834,"wifi@1.0-servic","/vendor/bin/hw/android.hardware.wifi@1.0-service",2046147338
-2265,834,"wifi@1.0-servic","/vendor/bin/hw/android.hardware.wifi@1.0-service",2046147338
2523,2523,"s.nexuslauncher","com.google.android.apps.nexuslauncher",1639085587
2531,2523,"Jit thread pool","com.google.android.apps.nexuslauncher",1639085587
2545,2523,"ReferenceQueueD","com.google.android.apps.nexuslauncher",1639085587
@@ -693,44 +691,44 @@
5911,2238,"raService] idle","com.google.android.gms",1130387110
6013,2238,"IntentService[M","com.google.android.gms",1130387110
6014,2238,"MediaTracker bu","com.google.android.gms",1130387110
-943,943,"omx@1.0-service","media.codec",930299908
-1107,943,"HwBinder:943_1","media.codec",930299908
-1110,943,"HwBinder:943_2","media.codec",930299908
-2165,943,"HwBinder:943_3","media.codec",930299908
-2184,943,"HwBinder:943_4","media.codec",930299908
-2229,943,"HwBinder:943_5","media.codec",930299908
-5481,943,"VideoDecCallBac","media.codec",930299908
-5483,943,"VideoDecMsgThre","media.codec",930299908
-5484,943,"OMXCallbackDisp","media.codec",930299908
-5835,943,"VideoEncMsgThre","media.codec",930299908
-5836,943,"VideoEncCallBac","media.codec",930299908
-5837,943,"OMXCallbackDisp","media.codec",930299908
-5841,943,"HwBinder:943_6","media.codec",930299908
-5854,943,"VideoEncMsgThre","media.codec",930299908
-5855,943,"VideoEncMsgThre","media.codec",930299908
-5737,5737,"oid.apps.photos","com.google.android.apps.photos",748904789
-5746,5737,"Jit thread pool","com.google.android.apps.photos",748904789
-5747,5737,"Signal Catcher","com.google.android.apps.photos",748904789
-5748,5737,"ADB-JDWP Connec","com.google.android.apps.photos",748904789
-5749,5737,"ReferenceQueueD","com.google.android.apps.photos",748904789
-5750,5737,"FinalizerDaemon","com.google.android.apps.photos",748904789
-5751,5737,"FinalizerWatchd","com.google.android.apps.photos",748904789
-5753,5737,"HeapTaskDaemon","com.google.android.apps.photos",748904789
-5754,5737,"Binder:5737_1","com.google.android.apps.photos",748904789
-5755,5737,"Binder:5737_2","com.google.android.apps.photos",748904789
-5761,5737,"Binder:5737_3","com.google.android.apps.photos",748904789
-5771,5737,"Profile Saver","com.google.android.apps.photos",748904789
-5777,5737,"default_backgro","com.google.android.apps.photos",748904789
-5779,5737,"Primes-init-1","com.google.android.apps.photos",748904789
-5787,5737,"queued-work-loo","com.google.android.apps.photos",748904789
-5788,5737,"MediaPageFetche","com.google.android.apps.photos",748904789
-5832,5737,"glide-source-th","com.google.android.apps.photos",748904789
-5866,5737,"glide-source-th","com.google.android.apps.photos",748904789
-6012,5737,"glide-source-th","com.google.android.apps.photos",748904789
-6017,5737,"Binder:5737_4","com.google.android.apps.photos",748904789
-6021,5737,"GrallocUploadTh","com.google.android.apps.photos",748904789
-6022,5737,"glide-active-re","com.google.android.apps.photos",748904789
-6025,5737,"BackgroundTask ","com.google.android.apps.photos",748904789
+943,943,"omx@1.0-service","media.codec",930299907
+1107,943,"HwBinder:943_1","media.codec",930299907
+1110,943,"HwBinder:943_2","media.codec",930299907
+2165,943,"HwBinder:943_3","media.codec",930299907
+2184,943,"HwBinder:943_4","media.codec",930299907
+2229,943,"HwBinder:943_5","media.codec",930299907
+5481,943,"VideoDecCallBac","media.codec",930299907
+5483,943,"VideoDecMsgThre","media.codec",930299907
+5484,943,"OMXCallbackDisp","media.codec",930299907
+5835,943,"VideoEncMsgThre","media.codec",930299907
+5836,943,"VideoEncCallBac","media.codec",930299907
+5837,943,"OMXCallbackDisp","media.codec",930299907
+5841,943,"HwBinder:943_6","media.codec",930299907
+5854,943,"VideoEncMsgThre","media.codec",930299907
+5855,943,"VideoEncMsgThre","media.codec",930299907
+5737,5737,"oid.apps.photos","com.google.android.apps.photos",748904788
+5746,5737,"Jit thread pool","com.google.android.apps.photos",748904788
+5747,5737,"Signal Catcher","com.google.android.apps.photos",748904788
+5748,5737,"ADB-JDWP Connec","com.google.android.apps.photos",748904788
+5749,5737,"ReferenceQueueD","com.google.android.apps.photos",748904788
+5750,5737,"FinalizerDaemon","com.google.android.apps.photos",748904788
+5751,5737,"FinalizerWatchd","com.google.android.apps.photos",748904788
+5753,5737,"HeapTaskDaemon","com.google.android.apps.photos",748904788
+5754,5737,"Binder:5737_1","com.google.android.apps.photos",748904788
+5755,5737,"Binder:5737_2","com.google.android.apps.photos",748904788
+5761,5737,"Binder:5737_3","com.google.android.apps.photos",748904788
+5771,5737,"Profile Saver","com.google.android.apps.photos",748904788
+5777,5737,"default_backgro","com.google.android.apps.photos",748904788
+5779,5737,"Primes-init-1","com.google.android.apps.photos",748904788
+5787,5737,"queued-work-loo","com.google.android.apps.photos",748904788
+5788,5737,"MediaPageFetche","com.google.android.apps.photos",748904788
+5832,5737,"glide-source-th","com.google.android.apps.photos",748904788
+5866,5737,"glide-source-th","com.google.android.apps.photos",748904788
+6012,5737,"glide-source-th","com.google.android.apps.photos",748904788
+6017,5737,"Binder:5737_4","com.google.android.apps.photos",748904788
+6021,5737,"GrallocUploadTh","com.google.android.apps.photos",748904788
+6022,5737,"glide-active-re","com.google.android.apps.photos",748904788
+6025,5737,"BackgroundTask ","com.google.android.apps.photos",748904788
1657,1657,"reel.wallpapers","com.breel.wallpapers",638226980
1663,1657,"Jit thread pool","com.breel.wallpapers",638226980
1774,1657,"Binder:1657_3","com.breel.wallpapers",638226980
@@ -743,33 +741,33 @@
686,624,"HWC_UeventThrea","/vendor/bin/hw/android.hardware.graphics.composer@2.1-service",617056001
687,624,"HwBinder:624_1","/vendor/bin/hw/android.hardware.graphics.composer@2.1-service",617056001
741,624,"HwBinder:624_2","/vendor/bin/hw/android.hardware.graphics.composer@2.1-service",617056001
-804,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-955,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-959,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-975,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-976,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-977,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1015,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1016,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1040,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1041,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1046,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1047,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1050,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1051,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1069,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1070,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1075,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1076,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1082,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1083,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1085,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1368,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1391,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1392,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-1393,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-5694,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
-5695,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607816
+804,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+955,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+959,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+975,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+976,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+977,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1015,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1016,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1040,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1041,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1046,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1047,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1050,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1051,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1069,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1070,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1075,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1076,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1082,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1083,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1085,804,"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1368,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1391,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1392,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+1393,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+5694,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
+5695,804,"HwBinder:804_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",536607815
5542,5542,"ssioncontroller","com.google.android.permissioncontroller",521893072
5547,5542,"Jit thread pool","com.google.android.permissioncontroller",521893072
5548,5542,"Signal Catcher","com.google.android.permissioncontroller",521893072
@@ -942,6 +940,8 @@
5173,2712,"Binder:2712_6","com.android.vending",177335230
5593,2712,"acquisitions.db","com.android.vending",177335230
6020,2712,"Binder:2712_7","com.android.vending",177335230
+834,834,"wifi@1.0-servic","/vendor/bin/hw/android.hardware.wifi@1.0-service",158591003
+2265,834,"wifi@1.0-servic","/vendor/bin/hw/android.hardware.wifi@1.0-service",158591003
968,968,"[NULL]","/vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service.fpc",154062201
1165,968,"fingerprint@2.1","/vendor/bin/hw/android.hardware.biometrics.fingerprint@2.1-service.fpc",154062201
935,935,"[NULL]","/system/bin/statsd",128205711
@@ -950,19 +950,19 @@
1354,924,"Binder:924_3","/system/bin/installd",125398920
1371,924,"Binder:924_4","/system/bin/installd",125398920
1381,924,"Binder:924_5","/system/bin/installd",125398920
-5659,5659,"e.process.gapps","com.google.process.gapps",116729960
-5664,5659,"Jit thread pool","com.google.process.gapps",116729960
-5665,5659,"Signal Catcher","com.google.process.gapps",116729960
-5666,5659,"ADB-JDWP Connec","com.google.process.gapps",116729960
-5667,5659,"ReferenceQueueD","com.google.process.gapps",116729960
-5668,5659,"FinalizerDaemon","com.google.process.gapps",116729960
-5669,5659,"FinalizerWatchd","com.google.process.gapps",116729960
-5670,5659,"HeapTaskDaemon","com.google.process.gapps",116729960
-5671,5659,"Binder:5659_1","com.google.process.gapps",116729960
-5672,5659,"Binder:5659_2","com.google.process.gapps",116729960
-5677,5659,"Binder:5659_3","com.google.process.gapps",116729960
-5678,5659,"Profile Saver","com.google.process.gapps",116729960
-5692,5659,"RefQueueWorker@","com.google.process.gapps",116729960
+5659,5659,"e.process.gapps","com.google.process.gapps",116729959
+5664,5659,"Jit thread pool","com.google.process.gapps",116729959
+5665,5659,"Signal Catcher","com.google.process.gapps",116729959
+5666,5659,"ADB-JDWP Connec","com.google.process.gapps",116729959
+5667,5659,"ReferenceQueueD","com.google.process.gapps",116729959
+5668,5659,"FinalizerDaemon","com.google.process.gapps",116729959
+5669,5659,"FinalizerWatchd","com.google.process.gapps",116729959
+5670,5659,"HeapTaskDaemon","com.google.process.gapps",116729959
+5671,5659,"Binder:5659_1","com.google.process.gapps",116729959
+5672,5659,"Binder:5659_2","com.google.process.gapps",116729959
+5677,5659,"Binder:5659_3","com.google.process.gapps",116729959
+5678,5659,"Profile Saver","com.google.process.gapps",116729959
+5692,5659,"RefQueueWorker@","com.google.process.gapps",116729959
5252,5252,"android.ramdump","com.android.ramdump",88012042
5257,5252,"Jit thread pool","com.android.ramdump",88012042
5258,5252,"Signal Catcher","com.android.ramdump",88012042
@@ -1248,408 +1248,3 @@
5061,2963,"Binder:2963_8","com.google.process.gapps",179740
4650,4650,"e.android.volta","com.google.android.volta",173594
4666,4650,"Binder:4650_1","com.google.android.volta",173594
-0,"[NULL]","swapper","[NULL]","[NULL]"
-1610,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-1611,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-1612,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-1613,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-2088,"[NULL]","AsyncTask #4","[NULL]","[NULL]"
-2281,"[NULL]","InflaterThread ","[NULL]","[NULL]"
-2282,"[NULL]","InflaterThread ","[NULL]","[NULL]"
-2283,"[NULL]","InflaterThread ","[NULL]","[NULL]"
-2329,"[NULL]","InflaterThread ","[NULL]","[NULL]"
-2817,"[NULL]","BlockingExecuto","[NULL]","[NULL]"
-2968,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-2969,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-2970,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-2971,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-2972,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-2973,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-2974,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-2982,"[NULL]","Binder:2963_1","[NULL]","[NULL]"
-2985,"[NULL]","Binder:2963_2","[NULL]","[NULL]"
-2986,"[NULL]","Binder:2963_3","[NULL]","[NULL]"
-2992,"[NULL]","Profile Saver","[NULL]","[NULL]"
-3073,"[NULL]","RefQueueWorker@","[NULL]","[NULL]"
-3095,"[NULL]","AsyncTask #1","[NULL]","[NULL]"
-3097,"[NULL]","AsyncTask #2","[NULL]","[NULL]"
-3140,"[NULL]","AsyncTask #3","[NULL]","[NULL]"
-3434,"[NULL]","measurement-1","[NULL]","[NULL]"
-3513,"[NULL]","Binder:2963_4","[NULL]","[NULL]"
-3607,"[NULL]","pool-4-thread-1","[NULL]","[NULL]"
-3941,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-3942,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-3944,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-3945,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-3946,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-3947,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-3948,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-3949,"[NULL]","Binder:3934_1","[NULL]","[NULL]"
-3954,"[NULL]","Binder:3934_3","[NULL]","[NULL]"
-3960,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4143,"[NULL]","unnerJobService","[NULL]","[NULL]"
-4200,"[NULL]","Binder:2963_5","[NULL]","[NULL]"
-4207,"[NULL]","oundTaskService","[NULL]","[NULL]"
-4230,"[NULL]","OkHttp Dispatch","[NULL]","[NULL]"
-4237,"[NULL]","OkHttp Http2Con","[NULL]","[NULL]"
-4285,"[NULL]","oundTaskService","[NULL]","[NULL]"
-4380,"[NULL]","Binder:2963_6","[NULL]","[NULL]"
-4476,"[NULL]","Binder:2963_7","[NULL]","[NULL]"
-4580,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-4581,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-4582,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-4583,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-4584,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-4585,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-4586,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-4587,"[NULL]","Binder:4572_1","[NULL]","[NULL]"
-4589,"[NULL]","Binder:4572_3","[NULL]","[NULL]"
-4593,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4600,"[NULL]","queued-work-loo","[NULL]","[NULL]"
-4608,"[NULL]","movies_logging","[NULL]","[NULL]"
-4610,"[NULL]","RefQueueWorker@","[NULL]","[NULL]"
-4611,"[NULL]","Thread-3","[NULL]","[NULL]"
-4612,"[NULL]","Thread-4","[NULL]","[NULL]"
-4613,"[NULL]","Thread-5","[NULL]","[NULL]"
-4614,"[NULL]","RefQueueWorker@","[NULL]","[NULL]"
-4615,"[NULL]","Thread-7","[NULL]","[NULL]"
-4616,"[NULL]","Thread-8","[NULL]","[NULL]"
-4617,"[NULL]","Thread-9","[NULL]","[NULL]"
-4618,"[NULL]","Thread-10","[NULL]","[NULL]"
-4619,"[NULL]","Thread-11","[NULL]","[NULL]"
-4620,"[NULL]","tentative-gc-ru","[NULL]","[NULL]"
-4625,"[NULL]","queued-work-loo","[NULL]","[NULL]"
-4635,"[NULL]","PlayEventLogger","[NULL]","[NULL]"
-4638,"[NULL]","network-1","[NULL]","[NULL]"
-4639,"[NULL]","network-2","[NULL]","[NULL]"
-4640,"[NULL]","network-3","[NULL]","[NULL]"
-4643,"[NULL]","network-4","[NULL]","[NULL]"
-4645,"[NULL]","local-1","[NULL]","[NULL]"
-4653,"[NULL]","local-2","[NULL]","[NULL]"
-4657,"[NULL]","ConnectivityThr","[NULL]","[NULL]"
-4659,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-4660,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-4661,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-4662,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-4663,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-4664,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-4665,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-4667,"[NULL]","pool-5-thread-1","[NULL]","[NULL]"
-4668,"[NULL]","Binder:4650_2","[NULL]","[NULL]"
-4669,"[NULL]","sync-1","[NULL]","[NULL]"
-4672,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4676,"[NULL]","GoogleApiHandle","[NULL]","[NULL]"
-4683,"[NULL]","GAC_Executor[0]","[NULL]","[NULL]"
-4684,"[NULL]","Binder:4650_3","[NULL]","[NULL]"
-4686,"[NULL]","queued-work-loo","[NULL]","[NULL]"
-4694,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-4695,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-4696,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-4697,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-4698,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-4699,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-4700,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-4701,"[NULL]","GAC_Executor[1]","[NULL]","[NULL]"
-4702,"[NULL]","Binder:4689_1","[NULL]","[NULL]"
-4703,"[NULL]","Binder:4689_2","[NULL]","[NULL]"
-4709,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4713,"[NULL]","Binder:4689_3","[NULL]","[NULL]"
-4730,"[NULL]","queued-work-loo","[NULL]","[NULL]"
-4872,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4873,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4874,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4876,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4887,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-4888,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-4889,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-4890,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-4891,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-4892,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-4893,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-4894,"[NULL]","Binder:4881_1","[NULL]","[NULL]"
-4895,"[NULL]","Binder:4881_2","[NULL]","[NULL]"
-4900,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4901,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4902,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4903,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4904,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4905,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4906,"[NULL]","pool-17-thread-","[NULL]","[NULL]"
-4969,"[NULL]","Jit thread pool","[NULL]","[NULL]"
-4970,"[NULL]","Signal Catcher","[NULL]","[NULL]"
-4971,"[NULL]","ADB-JDWP Connec","[NULL]","[NULL]"
-4972,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-4973,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-4974,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-4975,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-4977,"[NULL]","Binder:4964_2","[NULL]","[NULL]"
-4978,"[NULL]","Binder:4964_3","[NULL]","[NULL]"
-4980,"[NULL]","Profile Saver","[NULL]","[NULL]"
-4985,"[NULL]","dScanJobService","[NULL]","[NULL]"
-5064,"[NULL]","AsyncTask #5","[NULL]","[NULL]"
-5072,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-5073,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-5074,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-5075,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-5097,"[NULL]","AsyncTask #5","[NULL]","[NULL]"
-5103,"[NULL]","AsyncTask #1","[NULL]","[NULL]"
-5108,"[NULL]","AsyncTask #2","[NULL]","[NULL]"
-5115,"[NULL]","TaskSchedulerFo","[NULL]","[NULL]"
-5119,"[NULL]",".lowPriority #0","[NULL]","[NULL]"
-5126,"[NULL]",".lowPriority #3","[NULL]","[NULL]"
-5129,"[NULL]","AsyncTask #3","[NULL]","[NULL]"
-5131,"[NULL]","AsyncTask #4","[NULL]","[NULL]"
-5157,"[NULL]","TaskSchedulerBa","[NULL]","[NULL]"
-5158,"[NULL]","TaskSchedulerFo","[NULL]","[NULL]"
-5174,"[NULL]","TaskSchedulerBa","[NULL]","[NULL]"
-5175,"[NULL]","TaskSchedulerFo","[NULL]","[NULL]"
-5176,"[NULL]","TaskSchedulerFo","[NULL]","[NULL]"
-5194,"[NULL]","ReferenceQueueD","[NULL]","[NULL]"
-5195,"[NULL]","FinalizerDaemon","[NULL]","[NULL]"
-5196,"[NULL]","FinalizerWatchd","[NULL]","[NULL]"
-5197,"[NULL]","HeapTaskDaemon","[NULL]","[NULL]"
-5218,"[NULL]","Measurement Wor","[NULL]","[NULL]"
-5228,"[NULL]","Measurement Wor","[NULL]","[NULL]"
-5238,"[NULL]","pool-6-thread-1","[NULL]","[NULL]"
-5239,"[NULL]","pool-7-thread-1","[NULL]","[NULL]"
-5243,"[NULL]","atrace","[NULL]","[NULL]"
-5268,"[NULL]","Thread-2","[NULL]","[NULL]"
-5272,"[NULL]","applyRouting","[NULL]","[NULL]"
-5280,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5291,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5296,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5305,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5309,"[NULL]","gcm-task#1","[NULL]","[NULL]"
-5329,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5331,"[NULL]","EGL Init","[NULL]","[NULL]"
-5337,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5338,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5340,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5341,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5383,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5398,"[NULL]","gcm-task#1","[NULL]","[NULL]"
-5407,"[NULL]","IntentService[D","[NULL]","[NULL]"
-5433,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5434,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5435,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5439,"[NULL]","Thread-25","[NULL]","[NULL]"
-5454,"[NULL]","netd","[NULL]","[NULL]"
-5456,"[NULL]","netd","[NULL]","[NULL]"
-5459,"[NULL]","sensors.qcom","[NULL]","[NULL]"
-5460,"[NULL]","netd","[NULL]","[NULL]"
-5469,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5470,"[NULL]","netd","[NULL]","[NULL]"
-5472,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5474,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5494,"[NULL]","netd","[NULL]","[NULL]"
-5501,"[NULL]","netd","[NULL]","[NULL]"
-5504,"[NULL]","netd","[NULL]","[NULL]"
-5505,"[NULL]","netd","[NULL]","[NULL]"
-5521,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5523,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5535,"[NULL]","EGL Init","[NULL]","[NULL]"
-5558,"[NULL]","EGL Init","[NULL]","[NULL]"
-5580,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5583,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5584,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5586,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5587,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5594,"[NULL]","sensors.qcom","[NULL]","[NULL]"
-5602,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5603,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5612,"[NULL]","CAM_startsensor","[NULL]","[NULL]"
-5613,"[NULL]","CAM_startiface","[NULL]","[NULL]"
-5615,"[NULL]","CAM_startisp","[NULL]","[NULL]"
-5616,"[NULL]","CAM_startstats","[NULL]","[NULL]"
-5618,"[NULL]","CAM_startpproc","[NULL]","[NULL]"
-5619,"[NULL]","CAM_startimglib","[NULL]","[NULL]"
-5642,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5643,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5652,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5653,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5683,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5685,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5687,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5688,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5689,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5690,"[NULL]","cam_data_proc","[NULL]","[NULL]"
-5691,"[NULL]","cam_data_proc","[NULL]","[NULL]"
-5693,"[NULL]","CAM_jpeg_jobmgr","[NULL]","[NULL]"
-5697,"[NULL]","OMX_ImgEnc","[NULL]","[NULL]"
-5698,"[NULL]","cam_data_proc","[NULL]","[NULL]"
-5699,"[NULL]","cam_data_proc","[NULL]","[NULL]"
-5700,"[NULL]","cam_data_proc","[NULL]","[NULL]"
-5714,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5715,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5716,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5717,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5718,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5735,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5736,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5763,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5764,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5773,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5774,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5782,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5783,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5784,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5785,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5786,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5789,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5790,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5791,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5792,"[NULL]","applyRouting","[NULL]","[NULL]"
-5802,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5803,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5806,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5807,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5809,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5810,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5812,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5813,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5815,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5816,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5818,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5819,"[NULL]",".vorbis.decoder","[NULL]","[NULL]"
-5820,"[NULL]","OMXCallbackDisp","[NULL]","[NULL]"
-5821,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5822,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5823,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5828,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5830,"[NULL]","HwBinder:943_4","[NULL]","[NULL]"
-5831,"[NULL]","HwBinder:943_4","[NULL]","[NULL]"
-5833,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5838,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5842,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5843,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5844,"[NULL]","gcm-task#1","[NULL]","[NULL]"
-5846,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5856,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5857,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5858,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5859,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5860,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5861,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5863,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5864,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5867,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5868,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5871,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5874,"[NULL]","gcm-task#1","[NULL]","[NULL]"
-5880,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5881,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5882,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5883,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5887,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5888,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5889,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5890,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5891,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5892,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5893,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5894,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5895,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5896,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5897,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5898,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5899,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5900,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5901,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5902,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5903,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5904,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5905,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5906,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5907,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5908,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5909,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5912,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5913,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-5914,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5915,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5916,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5917,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5918,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5919,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5920,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5921,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5922,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5924,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5925,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5926,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5927,"[NULL]","applyRouting","[NULL]","[NULL]"
-5928,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5929,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5930,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5931,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5933,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5934,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5937,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5939,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5942,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5950,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5951,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5952,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5953,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5954,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5955,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5956,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5957,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5958,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5959,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5960,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5961,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5962,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5963,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5964,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5965,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5966,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5967,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5968,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5969,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5970,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5971,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5972,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5973,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5974,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5975,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5976,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5977,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5978,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5979,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5980,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5981,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5982,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5983,"[NULL]","driver_slow_ae:","[NULL]","[NULL]"
-5984,"[NULL]","CAM_METADATA","[NULL]","[NULL]"
-5985,"[NULL]","CAM_PREVIEW","[NULL]","[NULL]"
-5986,"[NULL]","CAM_SNAPSHOT","[NULL]","[NULL]"
-5987,"[NULL]","CAM_CALLBACK","[NULL]","[NULL]"
-5988,"[NULL]","CAM_CALLBACK","[NULL]","[NULL]"
-5989,"[NULL]","CAM_RAW","[NULL]","[NULL]"
-5990,"[NULL]","CAM_ANALYSISCAM","[NULL]","[NULL]"
-5991,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-5992,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-5993,"[NULL]","CAM_iface_poll","[NULL]","[NULL]"
-5994,"[NULL]","CAM_iface_hw","[NULL]","[NULL]"
-5995,"[NULL]","irq/164-arm-smm","[NULL]","[NULL]"
-5996,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-5997,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-5998,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-5999,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-6000,"[NULL]","CAM_StrmAppDat","[NULL]","[NULL]"
-6001,"[NULL]","irq/165-arm-smm","[NULL]","[NULL]"
-6002,"[NULL]","CAM_sof_timer","[NULL]","[NULL]"
-6003,"[NULL]","HwBinder:759_2","[NULL]","[NULL]"
-6004,"[NULL]","CAM_stopsensor","[NULL]","[NULL]"
-6005,"[NULL]","CAM_stopiface","[NULL]","[NULL]"
-6006,"[NULL]","CAM_stopisp","[NULL]","[NULL]"
-6007,"[NULL]","CAM_stopstats","[NULL]","[NULL]"
-6008,"[NULL]","CAM_stoppproc","[NULL]","[NULL]"
-6009,"[NULL]","CAM_stopimglib","[NULL]","[NULL]"
-6010,"[NULL]","ProPrgsFin","[NULL]","[NULL]"
-6015,"[NULL]","gcm-task#1","[NULL]","[NULL]"
-6016,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-6023,"[NULL]","SharedPreferenc","[NULL]","[NULL]"
-6024,"[NULL]","sensors.qcom","[NULL]","[NULL]"
-950,950,"[NULL]","[NULL]","[NULL]"
diff --git a/tools/add_tp_diff_test.py b/tools/add_tp_diff_test.py
index 0265988..5b9912c 100755
--- a/tools/add_tp_diff_test.py
+++ b/tools/add_tp_diff_test.py
@@ -161,6 +161,11 @@
index_file.write('{} {} {}\n'.format(trace_file, sql_file_or_metric,
out_file))
+ index_rel_path = os.path.join(chosen_folder_path_rel_root, 'index')
+ print()
+ print(f'Please modify the index file at {index_rel_path} by adding a '
+ f'comment and grouping with related tests')
+
return 0
diff --git a/ui/src/common/actions.ts b/ui/src/common/actions.ts
index e668c86..211da67 100644
--- a/ui/src/common/actions.ts
+++ b/ui/src/common/actions.ts
@@ -16,6 +16,9 @@
import {assertExists, assertTrue} from '../base/logging';
import {RecordConfig} from '../controller/record_config_types';
+import {globals} from '../frontend/globals';
+import {columnKey} from '../frontend/pivot_table_redux';
+import {TableColumn} from '../frontend/pivot_table_redux_query_generator';
import {ACTUAL_FRAMES_SLICE_TRACK_KIND} from '../tracks/actual_frames/common';
import {ASYNC_SLICE_TRACK_KIND} from '../tracks/async_slices/common';
import {COUNTER_TRACK_KIND} from '../tracks/counter/common';
@@ -51,7 +54,7 @@
LogsPagination,
NewEngineMode,
OmniboxState,
- PivotTableReduxState,
+ PivotTableReduxResult,
RecordingTarget,
SCROLLING_TRACK_GROUP,
State,
@@ -929,8 +932,15 @@
}
},
- togglePivotTableRedux(state: StateDraft, args: {selectionArea: Area|null}) {
- state.pivotTableRedux.selectionArea = args.selectionArea;
+ togglePivotTableRedux(state: StateDraft, args: {areaId: string|null}) {
+ state.nonSerializableState.pivotTableRedux.selectionArea =
+ args.areaId === null ?
+ null :
+ {areaId: args.areaId, tracks: globals.state.areas[args.areaId].tracks};
+ if (args.areaId !==
+ state.nonSerializableState.pivotTableRedux.selectionArea?.areaId) {
+ state.nonSerializableState.pivotTableRedux.queryResult = null;
+ }
},
addNewPivotTable(state: StateDraft, args: {
@@ -1009,14 +1019,55 @@
pivotTable.selectedTrackIds = args.selectedTrackIds;
},
- setPivotStateReduxState(
- state: StateDraft, args: {pivotTableState: PivotTableReduxState}) {
- state.pivotTableRedux = args.pivotTableState;
+ setPivotStateQueryResult(
+ state: StateDraft, args: {queryResult: PivotTableReduxResult|null}) {
+ state.nonSerializableState.pivotTableRedux.queryResult = args.queryResult;
+ },
+
+ setPivotTableReduxConstrainToArea(
+ state: StateDraft, args: {constrain: boolean}) {
+ state.nonSerializableState.pivotTableRedux.constrainToArea = args.constrain;
},
dismissFlamegraphModal(state: StateDraft, _: {}) {
state.flamegraphModalDismissed = true;
- }
+ },
+
+ setPivotTableEditMode(state: StateDraft, args: {editMode: boolean}) {
+ state.nonSerializableState.pivotTableRedux.editMode = args.editMode;
+ if (!args.editMode) {
+ // Switching from edit mode to view mode, need to request query
+ state.nonSerializableState.pivotTableRedux.queryRequested = true;
+ }
+ },
+
+ setPivotTableQueryRequested(
+ state: StateDraft, args: {queryRequested: boolean}) {
+ state.nonSerializableState.pivotTableRedux.queryRequested =
+ args.queryRequested;
+ },
+
+ setPivotTablePivotSelected(
+ state: StateDraft, args: {column: TableColumn, selected: boolean}) {
+ if (args.selected) {
+ state.nonSerializableState.pivotTableRedux.selectedPivotsMap.set(
+ columnKey(args.column), args.column);
+ } else {
+ state.nonSerializableState.pivotTableRedux.selectedPivotsMap.delete(
+ columnKey(args.column));
+ }
+ },
+
+ setPivotTableAggregationSelected(
+ state: StateDraft, args: {column: TableColumn, selected: boolean}) {
+ if (args.selected) {
+ state.nonSerializableState.pivotTableRedux.selectedAggregations.set(
+ columnKey(args.column), args.column);
+ } else {
+ state.nonSerializableState.pivotTableRedux.selectedAggregations.delete(
+ columnKey(args.column));
+ }
+ },
};
// When we are on the frontend side, we don't really want to execute the
diff --git a/ui/src/common/empty_state.ts b/ui/src/common/empty_state.ts
index c24567b..7878f6e 100644
--- a/ui/src/common/empty_state.ts
+++ b/ui/src/common/empty_state.ts
@@ -13,13 +13,20 @@
// limitations under the License.
import {createEmptyRecordConfig} from '../controller/record_config_types';
+import {columnKey} from '../frontend/pivot_table_redux';
+import {TableColumn} from '../frontend/pivot_table_redux_query_generator';
import {
autosaveConfigStore,
recordTargetStore
} from '../frontend/record_config';
import {featureFlags} from './feature_flags';
-import {defaultTraceTime, State, STATE_VERSION} from './state';
+import {
+ defaultTraceTime,
+ NonSerializableState,
+ State,
+ STATE_VERSION
+} from './state';
const AUTOLOAD_STARTED_CONFIG_FLAG = featureFlags.register({
id: 'autoloadStartedConfig',
@@ -29,6 +36,30 @@
defaultValue: true,
});
+function columnSet(...columns: TableColumn[]): Map<string, TableColumn> {
+ const result = new Map<string, TableColumn>();
+
+ for (const column of columns) {
+ result.set(columnKey(column), column);
+ }
+
+ return result;
+}
+
+export function createEmptyNonSerializableState(): NonSerializableState {
+ return {
+ pivotTableRedux: {
+ selectionArea: null,
+ queryResult: null,
+ editMode: true,
+ selectedPivotsMap: columnSet(['slice', 'category'], ['slice', 'name']),
+ selectedAggregations: columnSet(['thread_slice', 'thread_dur']),
+ constrainToArea: true,
+ queryRequested: false,
+ },
+ };
+}
+
export function createEmptyState(): State {
return {
version: STATE_VERSION,
@@ -102,7 +133,6 @@
fetchChromeCategories: false,
chromeCategories: undefined,
- pivotTableRedux:
- {selectionArea: null, query: null, queryId: 0, queryResult: null},
+ nonSerializableState: createEmptyNonSerializableState()
};
}
\ No newline at end of file
diff --git a/ui/src/common/state.ts b/ui/src/common/state.ts
index cd8fb60..316bcb2 100644
--- a/ui/src/common/state.ts
+++ b/ui/src/common/state.ts
@@ -15,6 +15,7 @@
import {assertTrue} from '../base/logging';
import {PivotTree} from '../controller/pivot_table_redux_controller';
import {RecordConfig} from '../controller/record_config_types';
+import {TableColumn} from '../frontend/pivot_table_redux_query_generator';
import {
AggregationAttrs,
@@ -365,16 +366,29 @@
metadata: PivotTableReduxQueryMetadata;
}
+// Input parameters to check whether the pivot table needs to be re-queried.
+export interface PivotTableReduxAreaState {
+ areaId: string;
+ tracks: string[];
+}
+
export interface PivotTableReduxState {
// Currently selected area, if null, pivot table is not going to be visible.
- selectionArea: Area|null;
- // Increasing identifier of the query request, used to avoid performing the
- // same query more than once.
- queryId: number;
- // Query request
- query: PivotTableReduxQuery|null;
+ selectionArea: PivotTableReduxAreaState|null;
// Query response
queryResult: PivotTableReduxResult|null;
+ // Whether the panel is in edit mode
+ editMode: boolean;
+ // Selected pivots. Map instead of Set because ES6 Set can't have
+ // non-primitive keys; here keys are concatenated values.
+ selectedPivotsMap: Map<string, TableColumn>;
+ // Selected aggregation columns. Stored same way as pivots.
+ selectedAggregations: Map<string, TableColumn>;
+ // Whether the pivot table results should be constrained to the selected area.
+ constrainToArea: boolean;
+ // Set to true by frontend to request controller to perform the query to
+ // acquire the necessary data from the engine.
+ queryRequested: boolean;
}
export interface LoadedConfigNone {
@@ -393,6 +407,10 @@
export type LoadedConfig =
LoadedConfigNone|LoadedConfigAutomatic|LoadedConfigNamed;
+export interface NonSerializableState {
+ pivotTableRedux: PivotTableReduxState;
+}
+
export interface State {
version: number;
currentEngineId?: string;
@@ -433,7 +451,6 @@
traceConversionInProgress: boolean;
pivotTableConfig: PivotTableConfig;
pivotTable: ObjectById<PivotTableState>;
- pivotTableRedux: PivotTableReduxState;
/**
* This state is updated on the frontend at 60Hz and eventually syncronised to
@@ -477,6 +494,11 @@
fetchChromeCategories: boolean;
chromeCategories: string[]|undefined;
analyzePageQuery?: string;
+
+ // Special key: this part of the state is not going to be serialized when
+ // using permalink. Can be used to store those parts of the state that can't
+ // be serialized at the moment, such as ES6 Set and Map.
+ nonSerializableState: NonSerializableState;
}
export const defaultTraceTime = {
diff --git a/ui/src/common/thread_state.ts b/ui/src/common/thread_state.ts
index c0d68f5..5289384 100644
--- a/ui/src/common/thread_state.ts
+++ b/ui/src/common/thread_state.ts
@@ -30,11 +30,14 @@
};
export function translateState(
- state: string|undefined, ioWait: boolean|undefined = undefined) {
+ state: string|undefined|null, ioWait: boolean|undefined = undefined) {
if (state === undefined) return '';
if (state === 'Running') {
return state;
}
+ if (state === null) {
+ return 'Unknown';
+ }
let result = states[state[0]];
if (ioWait === true) {
result += ' (IO)';
diff --git a/ui/src/common/upload_utils.ts b/ui/src/common/upload_utils.ts
index d817084..5bc344f 100644
--- a/ui/src/common/upload_utils.ts
+++ b/ui/src/common/upload_utils.ts
@@ -36,7 +36,9 @@
export async function saveState(stateOrConfig: State|
RecordConfig): Promise<string> {
- const text = JSON.stringify(stateOrConfig);
+ const text = JSON.stringify(stateOrConfig, (key, value) => {
+ return key === 'nonSerializableState' ? undefined : value;
+ });
const hash = await toSha256(text);
const url = 'https://www.googleapis.com/upload/storage/v1/b/' +
`${BUCKET_NAME}/o?uploadType=media` +
diff --git a/ui/src/controller/permalink_controller.ts b/ui/src/controller/permalink_controller.ts
index dc51d10..66cd1dd 100644
--- a/ui/src/controller/permalink_controller.ts
+++ b/ui/src/controller/permalink_controller.ts
@@ -17,7 +17,10 @@
import {assertExists} from '../base/logging';
import {Actions} from '../common/actions';
import {ConversionJobStatus} from '../common/conversion_jobs';
-import {createEmptyState} from '../common/empty_state';
+import {
+ createEmptyNonSerializableState,
+ createEmptyState
+} from '../common/empty_state';
import {State} from '../common/state';
import {STATE_VERSION} from '../common/state';
import {
@@ -110,6 +113,11 @@
console.warn(message);
PermalinkController.updateStatus(message);
return newState;
+ } else {
+ // Loaded state is presumed to be compatible with the State type
+ // definition in the app. However, a non-serializable part has to be
+ // recreated.
+ state.nonSerializableState = createEmptyNonSerializableState();
}
return state;
}
diff --git a/ui/src/controller/pivot_table_redux_controller.ts b/ui/src/controller/pivot_table_redux_controller.ts
index 4d17bf1..c72ce02 100644
--- a/ui/src/controller/pivot_table_redux_controller.ts
+++ b/ui/src/controller/pivot_table_redux_controller.ts
@@ -19,10 +19,16 @@
import {featureFlags} from '../common/feature_flags';
import {ColumnType} from '../common/query_result';
import {
+ AreaSelection,
+ PivotTableReduxQuery,
PivotTableReduxQueryMetadata,
- PivotTableReduxResult
+ PivotTableReduxResult,
+ PivotTableReduxState
} from '../common/state';
-import {aggregationIndex} from '../frontend/pivot_table_redux_query_generator';
+import {
+ aggregationIndex,
+ generateQueryFromState
+} from '../frontend/pivot_table_redux_query_generator';
import {Controller} from './controller';
import {globals} from './globals';
@@ -136,12 +142,84 @@
// executing its queries and post-processing query results.
export class PivotTableReduxController extends Controller<{}> {
engine: Engine;
- lastStartedQueryId: number;
+ lastQueryAreaId = '';
+ lastQueryAreaTracks = new Set<string>();
constructor(args: {engine: Engine}) {
super({});
this.engine = args.engine;
- this.lastStartedQueryId = 0;
+ }
+
+ sameTracks(tracks: Set<string>) {
+ if (this.lastQueryAreaTracks.size !== tracks.size) {
+ return false;
+ }
+
+ // ES6 Set does not have .every method, only Array does.
+ for (const track in tracks) {
+ if (!this.lastQueryAreaTracks.has(track)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ shouldRerun(state: PivotTableReduxState, selection: AreaSelection) {
+ if (state.selectionArea === null || state.editMode) {
+ return false;
+ }
+
+ const newTracks = new Set(globals.state.areas[selection.areaId].tracks);
+ if (this.lastQueryAreaId !== state.selectionArea.areaId ||
+ !this.sameTracks(newTracks)) {
+ this.lastQueryAreaId = state.selectionArea.areaId;
+ this.lastQueryAreaTracks = newTracks;
+ return true;
+ }
+ return false;
+ }
+
+ async processQuery(query: PivotTableReduxQuery) {
+ const result = await this.engine.query(query.text);
+ try {
+ await result.waitAllRows();
+ } catch {
+ // waitAllRows() frequently throws an exception, which is ignored in
+ // its other calls, so it's ignored here as well.
+ }
+
+ const columns = result.columns();
+
+ const it = result.iter({});
+ function nextRow(): ColumnType[] {
+ const row: ColumnType[] = [];
+ for (const column of columns) {
+ row.push(it.get(column));
+ }
+ it.next();
+ return row;
+ }
+
+ if (!it.valid()) {
+ // Iterator is invalid after creation; means that there are no rows
+ // satisfying filtering criteria. Return an empty tree.
+ globals.dispatch(Actions.setPivotStateQueryResult(
+ {queryResult: createEmptyQueryResult(query.metadata)}));
+ return;
+ }
+
+ const treeBuilder = new TreeBuilder(
+ query.metadata.pivotColumns.length,
+ query.metadata.aggregationColumns.length,
+ nextRow());
+ while (it.valid()) {
+ treeBuilder.ingestRow(nextRow());
+ }
+
+ globals.dispatch(Actions.setPivotStateQueryResult(
+ {queryResult: {tree: treeBuilder.build(), metadata: query.metadata}}));
+ globals.dispatch(Actions.setCurrentTab({tab: 'pivot_table_redux'}));
}
run() {
@@ -149,75 +227,31 @@
return;
}
- const pivotTableState = globals.state.pivotTableRedux;
- if (pivotTableState.queryId > this.lastStartedQueryId &&
- pivotTableState.query !== null) {
- this.lastStartedQueryId = pivotTableState.queryId;
- const query = pivotTableState.query;
+ const pivotTableState = globals.state.nonSerializableState.pivotTableRedux;
- this.engine.query(query.text).then(async (result) => {
- try {
- await result.waitAllRows();
- } catch {
- // waitAllRows() frequently throws an exception, which is ignored in
- // its other calls, so it's ignored here as well.
- }
-
- const columns = result.columns();
-
- const it = result.iter({});
- function nextRow(): ColumnType[] {
- const row: ColumnType[] = [];
- for (const column of columns) {
- row.push(it.get(column));
- }
- it.next();
- return row;
- }
-
- if (!it.valid()) {
- // Iterator is invalid after creation; means that there are no rows
- // satisfying filtering criteria. Return an empty tree.
- globals.dispatch(Actions.setPivotStateReduxState({
- pivotTableState: {
- queryId: this.lastStartedQueryId,
- query: null,
- queryResult: createEmptyQueryResult(query.metadata),
- selectionArea: pivotTableState.selectionArea
- }
- }));
- return;
- }
-
- const treeBuilder = new TreeBuilder(
- query.metadata.pivotColumns.length,
- query.metadata.aggregationColumns.length,
- nextRow());
- while (it.valid()) {
- treeBuilder.ingestRow(nextRow());
- }
-
- globals.dispatch(Actions.setPivotStateReduxState({
- pivotTableState: {
- queryId: this.lastStartedQueryId,
- query: null,
- queryResult: {
- tree: treeBuilder.build(),
- metadata: query.metadata,
- },
- selectionArea: pivotTableState.selectionArea
- }
- }));
- });
+ if (pivotTableState.queryRequested) {
+ globals.dispatch(
+ Actions.setPivotTableQueryRequested({queryRequested: false}));
+ this.processQuery(generateQueryFromState(pivotTableState));
}
const selection = globals.state.currentSelection;
- if (selection !== null && selection.kind === 'AREA') {
- const enabledArea = globals.state.areas[selection.areaId];
+
+ if (pivotTableState.queryRequested ||
+ (selection !== null && selection.kind === 'AREA' &&
+ this.shouldRerun(pivotTableState, selection))) {
globals.dispatch(
- Actions.togglePivotTableRedux({selectionArea: enabledArea}));
- } else {
- globals.dispatch(Actions.togglePivotTableRedux({selectionArea: null}));
+ Actions.setPivotTableQueryRequested({queryRequested: false}));
+ // Need to re-run the existing query, clear the current result.
+ globals.dispatch(Actions.setPivotStateQueryResult({queryResult: null}));
+ this.processQuery(generateQueryFromState(pivotTableState));
+ }
+
+ if (selection !== null && selection.kind === 'AREA' &&
+ (pivotTableState.selectionArea === null ||
+ pivotTableState.selectionArea.areaId !== selection.areaId)) {
+ globals.dispatch(
+ Actions.togglePivotTableRedux({areaId: selection.areaId}));
}
}
}
\ No newline at end of file
diff --git a/ui/src/controller/selection_controller.ts b/ui/src/controller/selection_controller.ts
index 7143e89..c57254f 100644
--- a/ui/src/controller/selection_controller.ts
+++ b/ui/src/controller/selection_controller.ts
@@ -377,7 +377,7 @@
ts: NUM,
dur: NUM,
priority: NUM,
- endState: STR,
+ endState: STR_NULL,
utid: NUM,
cpu: NUM,
threadStateId: NUM_NULL,
@@ -439,30 +439,33 @@
}
async schedulingDetails(ts: number, utid: number|Long) {
- let event = 'sched_waking';
- const waking = await this.args.engine.query(
- `select * from legacy_instant where name = 'sched_waking' limit 1`);
- const wakeup = await this.args.engine.query(
- `select * from legacy_instant where name = 'sched_wakeup' limit 1`);
- if (waking.numRows() === 0) {
- if (wakeup.numRows() === 0) return undefined;
- // Only use sched_wakeup if waking is not in the trace.
- event = 'sched_wakeup';
- }
-
- // Find the ts of the first sched_wakeup before the current slice.
- const queryWakeupTs = `select ts from legacy_instant where name = '${event}'
- and utid = ${utid} and ts < ${ts} order by ts desc limit 1`;
- const wakeResult = await this.args.engine.query(queryWakeupTs);
+ // Find the ts of the first wakeup before the current slice.
+ const wakeResult = await this.args.engine.query(`
+ select ts, waker_utid as wakerUtid
+ from thread_state
+ where utid = ${utid} and ts < ${ts} and state = 'R'
+ order by ts desc
+ limit 1
+ `);
if (wakeResult.numRows() === 0) {
return undefined;
}
- const wakeupTs = wakeResult.firstRow({ts: NUM}).ts;
+
+ const wakeFirstRow = wakeResult.firstRow({ts: NUM, wakerUtid: NUM_NULL});
+ const wakeupTs = wakeFirstRow.ts;
+ const wakerUtid = wakeFirstRow.wakerUtid;
+ if (wakerUtid === null) {
+ return undefined;
+ }
// Find the previous sched slice for the current utid.
- const queryPrevSched = `select ts from sched where utid = ${utid}
- and ts < ${ts} order by ts desc limit 1`;
- const prevSchedResult = await this.args.engine.query(queryPrevSched);
+ const prevSchedResult = await this.args.engine.query(`
+ select ts
+ from sched
+ where utid = ${utid} and ts < ${ts}
+ order by ts desc
+ limit 1
+ `);
// If this is the first sched slice for this utid or if the wakeup found
// was after the previous slice then we know the wakeup was for this slice.
@@ -470,39 +473,23 @@
wakeupTs < prevSchedResult.firstRow({ts: NUM}).ts) {
return undefined;
}
+
// Find the sched slice with the utid of the waker running when the
// sched wakeup occurred. This is the waker.
- let queryWaker = `
- select utid, cpu
+ const wakerResult = await this.args.engine.query(`
+ select cpu
from sched
- where utid = (
- select EXTRACT_ARG(arg_set_id, 'waker_utid')
- from legacy_instant
- where name = '${event}' and ts = ${wakeupTs}
- )
- and ts < ${wakeupTs} and ts + dur >= ${wakeupTs};
- `;
- let wakerResult = await this.args.engine.query(queryWaker);
- if (wakerResult.numRows() === 0) {
- // An old version of trace processor (that does not populate the
- // 'waker_utid' arg) might be in use. Try getting the same info from the
- // raw table).
- // TODO(b/206390308): Remove this workaround when
- // TRACE_PROCESSOR_CURRENT_API_VERSION is incremented.
- queryWaker = `select utid, cpu from sched where utid =
- (select utid from raw where name = '${event}' and ts = ${wakeupTs})
- and ts < ${wakeupTs} and ts + dur >= ${wakeupTs};`;
- wakerResult = await this.args.engine.query(queryWaker);
- }
+ where
+ utid = ${wakerUtid} and
+ ts < ${wakeupTs} and
+ ts + dur >= ${wakeupTs};
+ `);
if (wakerResult.numRows() === 0) {
return undefined;
}
- const wakerRow = wakerResult.firstRow({utid: NUM, cpu: NUM});
- return {
- wakeupTs: fromNs(wakeupTs),
- wakerUtid: wakerRow.utid,
- wakerCpu: wakerRow.cpu
- };
+
+ const wakerRow = wakerResult.firstRow({cpu: NUM});
+ return {wakeupTs: fromNs(wakeupTs), wakerUtid, wakerCpu: wakerRow.cpu};
}
async computeThreadDetails(utid: number):
diff --git a/ui/src/frontend/details_panel.ts b/ui/src/frontend/details_panel.ts
index c364d97..9b085c2 100644
--- a/ui/src/frontend/details_panel.ts
+++ b/ui/src/frontend/details_panel.ts
@@ -320,13 +320,15 @@
});
}
- if (globals.state.pivotTableRedux.selectionArea !== null) {
+ if (globals.state.nonSerializableState.pivotTableRedux.selectionArea !==
+ null) {
detailsPanels.push({
key: 'pivot_table_redux',
name: 'Pivot Table',
vnode: m(PivotTableRedux, {
key: 'pivot_table_redux',
- selectionArea: globals.state.pivotTableRedux.selectionArea
+ selectionArea:
+ globals.state.nonSerializableState.pivotTableRedux.selectionArea
})
});
}
diff --git a/ui/src/frontend/globals.ts b/ui/src/frontend/globals.ts
index 697524e..3381990 100644
--- a/ui/src/frontend/globals.ts
+++ b/ui/src/frontend/globals.ts
@@ -47,7 +47,7 @@
threadTs?: number;
threadDur?: number;
priority?: number;
- endState?: string;
+ endState?: string|null;
cpu?: number;
id?: number;
threadStateId?: number;
diff --git a/ui/src/frontend/pivot_table_redux.ts b/ui/src/frontend/pivot_table_redux.ts
index 262ebcf..6120114 100644
--- a/ui/src/frontend/pivot_table_redux.ts
+++ b/ui/src/frontend/pivot_table_redux.ts
@@ -15,12 +15,12 @@
*/
import * as m from 'mithril';
-import {GenericSet} from '../base/generic_set';
import {sqliteString} from '../base/string_utils';
-import {Actions} from '../common/actions';
+import {Actions, DeferredAction} from '../common/actions';
import {ColumnType} from '../common/query_result';
import {
Area,
+ PivotTableReduxAreaState,
PivotTableReduxQuery,
PivotTableReduxResult
} from '../common/state';
@@ -31,7 +31,6 @@
import {
aggregationIndex,
areaFilter,
- createColumnSet,
generateQuery,
QueryGeneratorError,
sliceAggregationColumns,
@@ -41,16 +40,30 @@
threadSliceAggregationColumns
} from './pivot_table_redux_query_generator';
-interface ColumnSetCheckboxAttrs {
- set: GenericSet<TableColumn>;
- setKey: TableColumn;
-}
-
interface PathItem {
tree: PivotTree;
nextKey: ColumnType;
}
+// Used to convert TableColumn to a string in order to store it in a Map, as
+// ES6 does not support compound Set/Map keys.
+export function columnKey(tableColumn: TableColumn): string {
+ return `${tableColumn[0]}.${tableColumn[1]}`;
+}
+
+// Arguments to an action to toggle a table column in a particular part of
+// application's state.
+interface ColumnSetArgs {
+ column: TableColumn;
+ selected: boolean;
+}
+
+interface ColumnSetCheckboxAttrs {
+ set: (args: ColumnSetArgs) => DeferredAction<ColumnSetArgs>;
+ get: Map<string, TableColumn>;
+ setKey: TableColumn;
+}
+
// Helper component that controls whether a particular key is present in a
// ColumnSet.
class ColumnSetCheckbox implements m.ClassComponent<ColumnSetCheckboxAttrs> {
@@ -58,20 +71,18 @@
return m('input[type=checkbox]', {
onclick: (e: InputEvent) => {
const target = e.target as HTMLInputElement;
- if (target.checked) {
- attrs.set.add(attrs.setKey);
- } else {
- attrs.set.delete(attrs.setKey);
- }
+
+ globals.dispatch(
+ attrs.set({column: attrs.setKey, selected: target.checked}));
globals.rafScheduler.scheduleFullRedraw();
},
- checked: attrs.set.has(attrs.setKey)
+ checked: attrs.get.has(columnKey(attrs.setKey))
});
}
}
interface PivotTableReduxAttrs {
- selectionArea: Area;
+ selectionArea: PivotTableReduxAreaState;
}
interface DrillFilter {
@@ -90,10 +101,18 @@
}
export class PivotTableRedux extends Panel<PivotTableReduxAttrs> {
- selectedPivotsMap = createColumnSet();
- selectedAggregations = createColumnSet();
- constrainToArea = true;
- editMode = true;
+ get selectedPivotsMap() {
+ return globals.state.nonSerializableState.pivotTableRedux.selectedPivotsMap;
+ }
+
+ get selectedAggregations() {
+ return globals.state.nonSerializableState.pivotTableRedux
+ .selectedAggregations;
+ }
+
+ get constrainToArea() {
+ return globals.state.nonSerializableState.pivotTableRedux.constrainToArea;
+ }
renderCanvas(): void {}
@@ -101,27 +120,10 @@
return generateQuery(
this.selectedPivotsMap,
this.selectedAggregations,
- attrs.selectionArea,
+ globals.state.areas[attrs.selectionArea.areaId],
this.constrainToArea);
}
- runQuery(attrs: PivotTableReduxAttrs) {
- try {
- const query = this.generateQuery(attrs);
- const lastPivotTableState = globals.state.pivotTableRedux;
- globals.dispatch(Actions.setPivotStateReduxState({
- pivotTableState: {
- query,
- queryId: lastPivotTableState.queryId + 1,
- selectionArea: lastPivotTableState.selectionArea,
- queryResult: null
- }
- }));
- } catch (e) {
- console.log(e);
- }
- }
-
renderTablePivotColumns(t: Table) {
return m(
'li',
@@ -131,7 +133,8 @@
col =>
m('li',
m(ColumnSetCheckbox, {
- set: this.selectedPivotsMap,
+ get: this.selectedPivotsMap,
+ set: Actions.setPivotTablePivotSelected,
setKey: [t.name, col],
}),
col))));
@@ -143,7 +146,7 @@
m('button.mode-button',
{
onclick: () => {
- this.editMode = true;
+ globals.dispatch(Actions.setPivotTableEditMode({editMode: true}));
globals.rafScheduler.scheduleFullRedraw();
}
},
@@ -280,8 +283,8 @@
}
renderResultsTable(attrs: PivotTableReduxAttrs) {
- const state = globals.state.pivotTableRedux;
- if (state.query !== null || state.queryResult === null) {
+ const state = globals.state.nonSerializableState.pivotTableRedux;
+ if (state.queryResult === null) {
return m('div', 'Loading...');
}
@@ -294,7 +297,11 @@
}
this.renderTree(
- attrs.selectionArea, [], tree, state.queryResult, renderedRows);
+ globals.state.areas[attrs.selectionArea.areaId],
+ [],
+ tree,
+ state.queryResult,
+ renderedRows);
const allColumns = state.queryResult.metadata.pivotColumns.concat(
state.queryResult.metadata.aggregationColumns);
@@ -306,16 +313,15 @@
renderQuery(attrs: PivotTableReduxAttrs): m.Vnode {
// Prepare a button to switch to results mode.
- let innerElement =
- m('button.mode-button',
- {
- onclick: () => {
- this.editMode = false;
- this.runQuery(attrs);
- globals.rafScheduler.scheduleFullRedraw();
- }
- },
- 'Execute');
+ let innerElement = m(
+ 'button.mode-button',
+ {
+ onclick: () => {
+ globals.dispatch(Actions.setPivotTableEditMode({editMode: false}));
+ globals.rafScheduler.scheduleFullRedraw();
+ }
+ },
+ 'Execute');
try {
this.generateQuery(attrs);
} catch (e) {
@@ -336,7 +342,8 @@
checked: this.constrainToArea,
onclick: (e: InputEvent) => {
const checkbox = e.target as HTMLInputElement;
- this.constrainToArea = checkbox.checked;
+ globals.dispatch(Actions.setPivotTableReduxConstrainToArea(
+ {constrain: checkbox.checked}));
}
}),
m('label',
@@ -348,8 +355,9 @@
}
view({attrs}: m.Vnode<PivotTableReduxAttrs>) {
- return this.editMode ? this.renderEditView(attrs) :
- this.renderResultsView(attrs);
+ return globals.state.nonSerializableState.pivotTableRedux.editMode ?
+ this.renderEditView(attrs) :
+ this.renderResultsView(attrs);
}
renderEditView(attrs: PivotTableReduxAttrs) {
@@ -368,7 +376,8 @@
t =>
m('li',
m(ColumnSetCheckbox, {
- set: this.selectedAggregations,
+ get: this.selectedAggregations,
+ set: Actions.setPivotTableAggregationSelected,
setKey: ['slice', t],
}),
t)),
@@ -376,7 +385,8 @@
t =>
m('li',
m(ColumnSetCheckbox, {
- set: this.selectedAggregations,
+ get: this.selectedAggregations,
+ set: Actions.setPivotTableAggregationSelected,
setKey: ['thread_slice', t],
}),
`thread_slice.${t}`)))),
diff --git a/ui/src/frontend/pivot_table_redux_query_generator.ts b/ui/src/frontend/pivot_table_redux_query_generator.ts
index c92243d..b1f0d9b 100644
--- a/ui/src/frontend/pivot_table_redux_query_generator.ts
+++ b/ui/src/frontend/pivot_table_redux_query_generator.ts
@@ -14,12 +14,16 @@
* limitations under the License.
*/
-import {GenericSet} from '../base/generic_set';
-import {Area, PivotTableReduxQuery} from '../common/state';
+import {
+ Area,
+ PivotTableReduxQuery,
+ PivotTableReduxState
+} from '../common/state';
import {toNs} from '../common/time';
import {
getSelectedTrackIds
} from '../controller/aggregation/slice_aggregation_controller';
+import {globals} from './globals';
export interface Table {
name: string;
@@ -65,10 +69,6 @@
// Pair of table name and column name.
export type TableColumn = [string, string];
-export function createColumnSet(): GenericSet<TableColumn> {
- return new GenericSet((column: TableColumn) => `${column[0]}.${column[1]}`);
-}
-
// Exception thrown by query generator in case incoming parameters are not
// suitable in order to build a correct query; these are caught by the UI and
// displayed to the user.
@@ -115,10 +115,10 @@
}
function computeSliceTableAggregations(
- selectedAggregations: GenericSet<TableColumn>):
+ selectedAggregations: Map<string, TableColumn>):
{tableName: string, flatAggregations: string[]} {
let hasThreadSliceColumn = false;
- const allColumns = [];
+ const allColumns: string[] = [];
for (const [table, column] of selectedAggregations.values()) {
if (table === 'thread_slice') {
hasThreadSliceColumn = true;
@@ -144,9 +144,22 @@
(pivotColumns - depth);
}
+export function generateQueryFromState(
+ state: PivotTableReduxState,
+ ): PivotTableReduxQuery {
+ if (state.selectionArea === null) {
+ throw new QueryGeneratorError('Should not be called without area');
+ }
+ return generateQuery(
+ state.selectedPivotsMap,
+ state.selectedAggregations,
+ globals.state.areas[state.selectionArea.areaId],
+ state.constrainToArea);
+}
+
export function generateQuery(
- selectedPivots: GenericSet<TableColumn>,
- selectedAggregations: GenericSet<TableColumn>,
+ selectedPivots: Map<string, TableColumn>,
+ selectedAggregations: Map<string, TableColumn>,
area: Area,
constrainToArea: boolean): PivotTableReduxQuery {
const sliceTableAggregations =
diff --git a/ui/src/tracks/cpu_slices/common.ts b/ui/src/tracks/cpu_slices/common.ts
index c87bbe9..a7eeeb4 100644
--- a/ui/src/tracks/cpu_slices/common.ts
+++ b/ui/src/tracks/cpu_slices/common.ts
@@ -22,6 +22,8 @@
starts: Float64Array;
ends: Float64Array;
utids: Uint32Array;
+ isIncomplete: Uint8Array;
+ lastRowId: number;
}
export interface Config { cpu: number; }
diff --git a/ui/src/tracks/cpu_slices/controller.ts b/ui/src/tracks/cpu_slices/controller.ts
index 9dc89bf..be1640d 100644
--- a/ui/src/tracks/cpu_slices/controller.ts
+++ b/ui/src/tracks/cpu_slices/controller.ts
@@ -27,6 +27,7 @@
private cachedBucketNs = Number.MAX_SAFE_INTEGER;
private maxDurNs = 0;
+ private lastRowId = -1;
async onSetup() {
await this.query(`
@@ -35,7 +36,8 @@
ts,
dur,
utid,
- id
+ id,
+ dur = -1 as isIncomplete
from sched
where cpu = ${this.config.cpu} and utid != 0
`);
@@ -44,6 +46,12 @@
select ifnull(max(dur), 0) as maxDur, count(1) as rowCount
from ${this.tableName('sched')}
`);
+
+ const queryLastSlice = await this.query(`
+ select max(id) as lastSliceId from ${this.tableName('sched')}
+ `);
+ this.lastRowId = queryLastSlice.firstRow({lastSliceId: NUM}).lastSliceId;
+
const row = queryRes.firstRow({maxDur: NUM, rowCount: NUM});
this.maxDurNs = row.maxDur;
const rowCount = row.rowCount;
@@ -51,6 +59,7 @@
if (bucketNs === undefined) {
return;
}
+
await this.query(`
create table ${this.tableName('sched_cached')} as
select
@@ -58,9 +67,10 @@
ts,
max(dur) as dur,
utid,
- id
+ id,
+ isIncomplete
from ${this.tableName('sched')}
- group by cached_tsq
+ group by cached_tsq, isIncomplete
order by cached_tsq
`);
this.cachedBucketNs = bucketNs;
@@ -74,8 +84,8 @@
// function to make sense.
assertTrue(Math.log2(resolutionNs) % 1 === 0);
- const startNs = toNs(start);
- const endNs = toNs(end);
+ const boundStartNs = toNs(start);
+ const boundEndNs = toNs(end);
// ns per quantization bucket (i.e. ns per pixel). /2 * 2 is to force it to
// be an even number, so we can snap in the middle.
@@ -96,12 +106,13 @@
ts,
max(dur) as dur,
utid,
- id
+ id,
+ isIncomplete
from ${queryTable}
where
- ${constraintColumn} >= ${startNs - this.maxDurNs} and
- ${constraintColumn} <= ${endNs}
- group by tsq
+ ${constraintColumn} >= ${boundStartNs - this.maxDurNs} and
+ ${constraintColumn} <= ${boundEndNs}
+ group by tsq, isIncomplete
order by tsq
`);
@@ -111,28 +122,50 @@
end,
resolution,
length: numRows,
+ lastRowId: this.lastRowId,
ids: new Float64Array(numRows),
starts: new Float64Array(numRows),
ends: new Float64Array(numRows),
utids: new Uint32Array(numRows),
+ isIncomplete: new Uint8Array(numRows)
};
- const it = queryRes.iter({tsq: NUM, ts: NUM, dur: NUM, utid: NUM, id: NUM});
+ const it = queryRes.iter(
+ {tsq: NUM, ts: NUM, dur: NUM, utid: NUM, id: NUM, isIncomplete: NUM});
for (let row = 0; it.valid(); it.next(), row++) {
const startNsQ = it.tsq;
const startNs = it.ts;
const durNs = it.dur;
const endNs = startNs + durNs;
- let endNsQ = Math.floor((endNs + bucketNs / 2 - 1) / bucketNs) * bucketNs;
- endNsQ = Math.max(endNsQ, startNsQ + bucketNs);
+ // If the slice is incomplete, the end calculated later.
+ if (!it.isIncomplete) {
+ let endNsQ =
+ Math.floor((endNs + bucketNs / 2 - 1) / bucketNs) * bucketNs;
+ endNsQ = Math.max(endNsQ, startNsQ + bucketNs);
+ slices.ends[row] = fromNs(endNsQ);
+ }
slices.starts[row] = fromNs(startNsQ);
- slices.ends[row] = fromNs(endNsQ);
slices.utids[row] = it.utid;
slices.ids[row] = it.id;
+ slices.isIncomplete[row] = it.isIncomplete;
}
+ // If the slice is incomplete and it is the last slice in the track, the end
+ // of the slice would be the end of the visible window. Otherwise we end the
+ // slice with the beginning the next one.
+ for (let row = 0; row < slices.length; row++) {
+ if (!slices.isIncomplete[row]) {
+ continue;
+ }
+ const endNs =
+ row === slices.length - 1 ? boundEndNs : toNs(slices.starts[row + 1]);
+
+ let endNsQ = Math.floor((endNs + bucketNs / 2 - 1) / bucketNs) * bucketNs;
+ endNsQ = Math.max(endNsQ, toNs(slices.starts[row]) + bucketNs);
+ slices.ends[row] = fromNs(endNsQ);
+ }
return slices;
}
diff --git a/ui/src/tracks/cpu_slices/frontend.ts b/ui/src/tracks/cpu_slices/frontend.ts
index 16f140c..944dcb7 100644
--- a/ui/src/tracks/cpu_slices/frontend.ts
+++ b/ui/src/tracks/cpu_slices/frontend.ts
@@ -15,7 +15,11 @@
import {search, searchEq, searchSegment} from '../../base/binary_search';
import {assertTrue} from '../../base/logging';
import {Actions} from '../../common/actions';
-import {cropText, drawDoubleHeadedArrow} from '../../common/canvas_utils';
+import {
+ cropText,
+ drawDoubleHeadedArrow,
+ drawIncompleteSlice
+} from '../../common/canvas_utils';
import {colorForThread} from '../../common/colorizer';
import {timeToString} from '../../common/time';
import {checkerboardExcept} from '../../frontend/checkerboard';
@@ -88,9 +92,15 @@
for (let i = startIdx; i < endIdx; i++) {
const tStart = data.starts[i];
- const tEnd = data.ends[i];
+ let tEnd = data.ends[i];
const utid = data.utids[i];
+ // If the last slice is incomplete, it should end with the end of the
+ // window, else it might spill over the window and the end would not be
+ // visible as a zigzag line.
+ if (data.ids[i] === data.lastRowId && data.isIncomplete[i]) {
+ tEnd = visibleWindowTime.end;
+ }
const rectStart = timeScale.timeToPx(tStart);
const rectEnd = timeScale.timeToPx(tEnd);
const rectWidth = Math.max(1, rectEnd - rectStart);
@@ -115,7 +125,11 @@
color.s -= 20;
}
ctx.fillStyle = `hsl(${color.h}, ${color.s}%, ${color.l}%)`;
- ctx.fillRect(rectStart, MARGIN_TOP, rectWidth, RECT_HEIGHT);
+ if (data.isIncomplete[i]) {
+ drawIncompleteSlice(ctx, rectStart, MARGIN_TOP, rectWidth, RECT_HEIGHT);
+ } else {
+ ctx.fillRect(rectStart, MARGIN_TOP, rectWidth, RECT_HEIGHT);
+ }
// Don't render text when we have less than 5px to play with.
if (rectWidth < 5) continue;