Automated commit: libchrome r1292322 uprev
Merge with upstream commit 2a3b543c3d779f8d48e025ddb99f2738fd7be348
BUG=None
TEST=sudo emerge libchrome
Change-Id: I8e7387da5b96ba3cb29d27fa7f90d8f90605a815
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/libchrome/+/5488821
Commit-Queue: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
Tested-by: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
Bot-Commit: ChromeOS Prod (Robot) <chromeos-ci-prod@chromeos-bot.iam.gserviceaccount.com>
diff --git a/BASE_VER b/BASE_VER
index cba6eb4..bff0807 100644
--- a/BASE_VER
+++ b/BASE_VER
@@ -1 +1 @@
-1291648
+1292322
diff --git a/base/android/pre_freeze_background_memory_trimmer.cc b/base/android/pre_freeze_background_memory_trimmer.cc
index df86e13..a9fcccf 100644
--- a/base/android/pre_freeze_background_memory_trimmer.cc
+++ b/base/android/pre_freeze_background_memory_trimmer.cc
@@ -42,7 +42,7 @@
base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII("type");
const char* process_type = type == "" ? "Browser"
: type == "renderer" ? "Renderer"
- : type == "gpu-process" ? "Gpu"
+ : type == "gpu-process" ? "GPU"
: type == "utility" ? "Utility"
: "Unknown";
return process_type;
diff --git a/base/feature_list.cc b/base/feature_list.cc
index 5a138a0..eced7a3 100644
--- a/base/feature_list.cc
+++ b/base/feature_list.cc
@@ -358,21 +358,21 @@
}
bool FeatureList::IsFeatureOverridden(const std::string& feature_name) const {
- return overrides_.count(feature_name);
+ return GetOverrideEntryByFeatureName(feature_name);
}
bool FeatureList::IsFeatureOverriddenFromCommandLine(
const std::string& feature_name) const {
- auto it = overrides_.find(feature_name);
- return it != overrides_.end() && !it->second.overridden_by_field_trial;
+ const OverrideEntry* entry = GetOverrideEntryByFeatureName(feature_name);
+ return entry && !entry->overridden_by_field_trial;
}
bool FeatureList::IsFeatureOverriddenFromCommandLine(
const std::string& feature_name,
OverrideState state) const {
- auto it = overrides_.find(feature_name);
- return it != overrides_.end() && !it->second.overridden_by_field_trial &&
- it->second.overridden_state == state;
+ const OverrideEntry* entry = GetOverrideEntryByFeatureName(feature_name);
+ return entry && !entry->overridden_by_field_trial &&
+ entry->overridden_state == state;
}
void FeatureList::AssociateReportingFieldTrial(
@@ -778,17 +778,16 @@
DCHECK(initialized_);
DCHECK(IsValidFeatureOrFieldTrialName(feature_name)) << feature_name;
- auto it = overrides_.find(feature_name);
- if (it != overrides_.end()) {
- const OverrideEntry& entry = it->second;
-
+ if (const OverrideEntry* entry =
+ GetOverrideEntryByFeatureName(feature_name)) {
// Activate the corresponding field trial, if necessary.
- if (entry.field_trial)
- entry.field_trial->Activate();
+ if (entry->field_trial) {
+ entry->field_trial->Activate();
+ }
// TODO(asvitkine) Expand this section as more support is added.
- return entry.overridden_state;
+ return entry->overridden_state;
}
// Otherwise, report that we want to use the default state.
return OVERRIDE_USE_DEFAULT;
@@ -803,7 +802,6 @@
const base::FeatureList::OverrideEntry*
FeatureList::GetOverrideEntryByFeatureName(std::string_view name) const {
- DCHECK(initialized_);
DCHECK(IsValidFeatureOrFieldTrialName(name)) << name;
auto it = overrides_.find(name);
@@ -818,9 +816,7 @@
std::string_view name) const {
DCHECK(initialized_);
- const base::FeatureList::OverrideEntry* entry =
- GetOverrideEntryByFeatureName(name);
- if (entry) {
+ if (const OverrideEntry* entry = GetOverrideEntryByFeatureName(name)) {
return entry->field_trial;
}
return nullptr;
@@ -829,8 +825,9 @@
bool FeatureList::HasAssociatedFieldTrialByFeatureName(
std::string_view name) const {
DCHECK(!initialized_);
- auto entry = overrides_.find(name);
- return entry != overrides_.end() && entry->second.field_trial != nullptr;
+
+ const OverrideEntry* entry = GetOverrideEntryByFeatureName(name);
+ return entry && entry->field_trial;
}
FieldTrial* FeatureList::GetEnabledFieldTrialByFeatureName(
diff --git a/base/profiler/chrome_unwind_info_android_unittest.cc b/base/profiler/chrome_unwind_info_android_unittest.cc
index d6272fb..4d7aec7 100644
--- a/base/profiler/chrome_unwind_info_android_unittest.cc
+++ b/base/profiler/chrome_unwind_info_android_unittest.cc
@@ -2,6 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/40284755): Remove this and use spans.
+#pragma allow_unsafe_buffers
+#endif
+
#include "base/profiler/chrome_unwind_info_android.h"
#include <tuple>
diff --git a/base/profiler/chrome_unwinder_android_unittest.cc b/base/profiler/chrome_unwinder_android_unittest.cc
index 731b60b..89f639e 100644
--- a/base/profiler/chrome_unwinder_android_unittest.cc
+++ b/base/profiler/chrome_unwinder_android_unittest.cc
@@ -2,6 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/40284755): Remove this and use spans.
+#pragma allow_unsafe_buffers
+#endif
+
#include "base/profiler/chrome_unwinder_android.h"
#include "base/memory/aligned_memory.h"
diff --git a/base/test/with_feature_override.cc b/base/test/with_feature_override.cc
index f64fe9d..ee84abd 100644
--- a/base/test/with_feature_override.cc
+++ b/base/test/with_feature_override.cc
@@ -22,7 +22,7 @@
}
}
-bool WithFeatureOverride::IsParamFeatureEnabled() {
+bool WithFeatureOverride::IsParamFeatureEnabled() const {
return GetParam();
}
diff --git a/base/test/with_feature_override.h b/base/test/with_feature_override.h
index e396c2a..af09131 100644
--- a/base/test/with_feature_override.h
+++ b/base/test/with_feature_override.h
@@ -45,7 +45,7 @@
// Use to know if the configured feature provided in the constructor is
// enabled or not.
- bool IsParamFeatureEnabled();
+ bool IsParamFeatureEnabled() const;
private:
base::test::ScopedFeatureList scoped_feature_list_;
diff --git a/base/trace_event/cfi_backtrace_android_unittest.cc b/base/trace_event/cfi_backtrace_android_unittest.cc
index 757a99f..1d150b4 100644
--- a/base/trace_event/cfi_backtrace_android_unittest.cc
+++ b/base/trace_event/cfi_backtrace_android_unittest.cc
@@ -2,6 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#ifdef UNSAFE_BUFFERS_BUILD
+// TODO(crbug.com/40284755): Remove this and use spans.
+#pragma allow_unsafe_buffers
+#endif
+
#include "base/trace_event/cfi_backtrace_android.h"
#include "base/files/file_util.h"
diff --git a/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql b/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql
index 8df0937..f1bfd37 100644
--- a/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql
+++ b/base/tracing/stdlib/chrome/scroll_jank/scroll_offsets.sql
@@ -29,189 +29,104 @@
-- various stages of input processing, and are unified by a single
-- scroll_update_id value, recorded as scroll_deltas.trace_id in each event.
+INCLUDE PERFETTO MODULE chrome.chrome_scrolls;
INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_jank_v3;
--- Non-coalesced scroll update events and their timestamps.
-CREATE PERFETTO VIEW _non_coalesced_scrolls AS
-SELECT
- scroll_update_id,
- ts
-FROM chrome_gesture_scroll_updates
-WHERE is_coalesced = False;
-
-- All (coalesced and non-coalesced) vertical scrolling deltas and their
-- associated scroll ids. Delta values are recorded after being scaled to the
-- device's screen size in the TranslateAndScaleWebInputEvent trace event. In
-- this trace event, the deltas recorded represent the true (read "original")
-- values that the Browser receives from Android, and the only processing is
-- scaling and translation.
-CREATE PERFETTO TABLE _scroll_deltas AS
+CREATE PERFETTO TABLE _translate_and_scale_scroll_deltas AS
SELECT
EXTRACT_ARG(arg_set_id, 'scroll_deltas.trace_id') AS scroll_update_id,
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.original_delta_y') AS delta_y,
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.original_delta_y') IS NOT NULL AS is_coalesced
+ EXTRACT_ARG(arg_set_id, 'scroll_deltas.original_delta_y') AS delta_y
FROM slice
-WHERE name = "TranslateAndScaleWebInputEvent";
+WHERE slice.name = 'TranslateAndScaleWebInputEvent';
--- Associate the raw (original) deltas (_scroll_deltas) with the
--- corresponding non-coalesced scroll updates
--- (_non_coalesced_scroll_updates) to get the timestamp of the event
--- those deltas. This allows for ordering delta recordings to track them over
--- time.
-CREATE PERFETTO VIEW _non_coalesced_deltas AS
+-- Associate the gesture scroll update OS timestamp with the delta.
+CREATE PERFETTO TABLE _scroll_deltas_with_timestamp AS
SELECT
- scroll_update_id,
- ts,
- delta_y
-FROM _non_coalesced_scrolls
-INNER JOIN _scroll_deltas
- USING (scroll_update_id);
+ slice.ts AS input_ts,
+ data.scroll_update_id,
+ data.delta_y
+FROM _translate_and_scale_scroll_deltas data
+ JOIN slice ON slice.name = 'EventLatency'
+ AND data.scroll_update_id = EXTRACT_ARG(arg_set_id,
+ 'event_latency.event_latency_id');
--- Selecting information scroll update events that have been coalesced,
--- including timestamp and the specific event (scroll update id) it was
--- coalesced into. Recordings of deltas will need to be associated with the
--- timestamp of the scroll update they were coalesced into.
-CREATE PERFETTO TABLE _scroll_update_coalesce_info AS
+-- Associate the scroll update/delta with the correct scroll.
+CREATE PERFETTO TABLE _scroll_deltas_with_scroll_id AS
SELECT
- ts,
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.coalesced_to_trace_id') AS coalesced_to_scroll_update_id,
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.trace_id') AS scroll_update_id
-FROM slice
-WHERE name = "WebCoalescedInputEvent::CoalesceWith" AND
- coalesced_to_scroll_update_id IS NOT NULL;
+ scrolls.id AS scroll_id,
+ deltas.input_ts,
+ deltas.scroll_update_id,
+ deltas.delta_y
+FROM _scroll_deltas_with_timestamp deltas
+ LEFT JOIN chrome_scrolls scrolls
+ ON deltas.input_ts >= scrolls.ts
+ AND deltas.input_ts <= scrolls.ts + scrolls.dur;
--- Associate the raw (original) deltas (_scroll_deltas) with the
--- corresponding coalesced scroll updates (_scroll_update_coalesce_info)
--- to get the timestamp of the event those deltas were coalesced into. This
--- allows us to get the scaled coordinates for all of the input events
--- (original input coordinates can't be used due to scaling).
-CREATE PERFETTO VIEW _coalesced_deltas AS
+-- Associate the presentation timestamp/deltas with the user deltas.
+CREATE PERFETTO TABLE _scroll_deltas_with_delays AS
SELECT
- _scroll_update_coalesce_info.coalesced_to_scroll_update_id AS scroll_update_id,
- ts,
- _scroll_deltas.delta_y AS delta_y,
- TRUE AS is_coalesced
-FROM _scroll_update_coalesce_info
-LEFT JOIN _scroll_deltas
- USING (scroll_update_id);
-
--- All of the presented frame scroll update ids.
-CREATE PERFETTO VIEW chrome_deltas_presented_frame_scroll_update_ids(
- -- A scroll update id that was included in the presented frame.
- -- There may be zero, one, or more.
- scroll_update_id INT,
- -- Slice id
- id INT
-) AS
-SELECT
- args.int_value AS scroll_update_id,
- slice.id
-FROM args
-LEFT JOIN slice
- USING (arg_set_id)
-WHERE slice.name = 'PresentedFrameInformation'
-AND args.flat_key GLOB 'scroll_deltas.trace_ids_in_gpu_frame*';;
-
--- When every GestureScrollUpdate event is processed, the offset set by the
--- compositor is recorded. This offset is scaled to the device screen size, and
--- can be used to calculate deltas.
-CREATE PERFETTO VIEW _presented_frame_offsets AS
-SELECT
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.trace_id') AS scroll_update_id,
- EXTRACT_ARG(arg_set_id, 'scroll_deltas.visual_offset_y') AS visual_offset_y
-FROM slice
-WHERE name = 'InputHandlerProxy::HandleGestureScrollUpdate_Result';
+ deltas.scroll_id,
+ delay.total_delta,
+ delay.scroll_update_id,
+ delay.presentation_timestamp AS presentation_timestamp,
+ deltas.input_ts,
+ deltas.delta_y
+FROM _scroll_deltas_with_scroll_id AS deltas
+ LEFT JOIN chrome_frame_info_with_delay AS delay USING(scroll_update_id);
-- The raw coordinates and pixel offsets for all input events which were part of
--- a scroll. This includes input events that were converted to scroll events
--- which were presented (_non_coalesced_scrolls) and scroll events which
--- were coalesced (_coalesced_deltas).
+-- a scroll.
CREATE PERFETTO TABLE chrome_scroll_input_offsets(
-- Trace id associated with the scroll.
+ scroll_id INT,
+ -- Trace id associated with the scroll.
scroll_update_id INT,
-- Timestamp the of the scroll input event.
ts INT,
- -- The delta in raw coordinates between this scroll update event and the previous.
+ -- The delta in raw coordinates between this scroll update event and the
+ -- previous.
delta_y INT,
- -- The pixel offset of this scroll update event compared to the previous one.
- offset_y INT
+ -- The pixel offset of this scroll update event compared to the initial one.
+ relative_offset_y INT
) AS
--- First collect all coalesced and non-coalesced deltas so that the offsets
--- can be calculated from them in order of timestamp.
-WITH all_deltas AS (
- SELECT
- scroll_update_id,
- ts,
- delta_y
- FROM _non_coalesced_deltas
- WHERE delta_y IS NOT NULL
- UNION
- SELECT
- scroll_update_id,
- ts,
- delta_y
- FROM _coalesced_deltas
- WHERE delta_y IS NOT NULL
- ORDER BY scroll_update_id, ts)
SELECT
+ scroll_id,
scroll_update_id,
- ts,
+ input_ts AS ts,
delta_y,
- SUM(IFNULL(delta_y, 0)) OVER (
- ORDER BY scroll_update_id, ts
- ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS offset_y
-FROM all_deltas;
-
--- Calculate the total visual offset for all presented frames (non-coalesced
--- scroll updates) that have raw deltas recorded. These visual offsets
--- correspond with the inverse of the deltas for the presented frame.
-CREATE PERFETTO VIEW _preprocessed_presented_frame_offsets AS
-SELECT
- chrome_full_frame_view.scroll_update_id,
- chrome_full_frame_view.presentation_timestamp AS ts,
- chrome_deltas_presented_frame_scroll_update_ids.id,
- _presented_frame_offsets.visual_offset_y -
- LAG(_presented_frame_offsets.visual_offset_y)
- OVER (ORDER BY chrome_full_frame_view.presentation_timestamp)
- AS presented_frame_visual_offset_y
-FROM chrome_full_frame_view
-LEFT JOIN _scroll_deltas
- USING (scroll_update_id)
-LEFT JOIN chrome_deltas_presented_frame_scroll_update_ids
- USING (scroll_update_id)
-LEFT JOIN _presented_frame_offsets
- USING (scroll_update_id)
-WHERE _scroll_deltas.delta_y IS NOT NULL;
+ SUM(IFNULL(delta_y, 0)) OVER ( PARTITION BY scroll_id
+ ORDER BY scroll_update_id, input_ts
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS relative_offset_y
+FROM _scroll_deltas_with_delays;
-- The scrolling offsets for the actual (applied) scroll events. These are not
-- necessarily inclusive of all user scroll events, rather those scroll events
-- that are actually processed.
CREATE PERFETTO TABLE chrome_presented_scroll_offsets(
- -- Trace Id associated with the scroll.
+ -- Trace id associated with the scroll.
+ scroll_id INT,
+ -- Trace id associated with the scroll update event.
scroll_update_id INT,
-- Presentation timestamp.
ts INT,
- -- The delta in coordinates as processed by Chrome between this scroll update
- -- event and the previous.
+ -- The delta in raw coordinates between this scroll update event and the
+ -- previous.
delta_y INT,
- -- The pixel offset of this scroll update (the presented frame) compared to
- -- the previous one.
- offset_y INT
+ -- The pixel offset of this scroll update event compared to the initial one.
+ relative_offset_y INT
) AS
-WITH all_deltas AS (
- SELECT
- scroll_update_id,
- id,
- MAX(ts) AS ts,
- SUM(presented_frame_visual_offset_y) * -1 AS delta_y
- FROM _preprocessed_presented_frame_offsets
- GROUP BY id
- ORDER BY ts)
SELECT
+ scroll_id,
scroll_update_id,
- ts,
- delta_y,
- SUM(IFNULL(delta_y, 0)) OVER (
- ORDER BY scroll_update_id, ts
- ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS offset_y
-FROM all_deltas;
+ presentation_timestamp AS ts,
+ total_delta AS delta_y,
+ SUM(IFNULL(total_delta, 0)) OVER ( PARTITION BY scroll_id
+ ORDER BY scroll_update_id, presentation_timestamp
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS relative_offset_y
+FROM _scroll_deltas_with_delays;
\ No newline at end of file
diff --git a/base/tracing/test/data/scroll_offsets_trace_2.pftrace.sha256 b/base/tracing/test/data/scroll_offsets_trace_2.pftrace.sha256
new file mode 100644
index 0000000..27d8ace
--- /dev/null
+++ b/base/tracing/test/data/scroll_offsets_trace_2.pftrace.sha256
@@ -0,0 +1 @@
+2ddd9f78d91d51e39c72c520bb54fdc9dbf1333ae722e87633fc345159296289
\ No newline at end of file
diff --git a/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py b/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
index 3f9e4b8..bdde242 100755
--- a/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
+++ b/base/tracing/test/trace_processor/diff_tests/chrome/tests_scroll_jank.py
@@ -83,7 +83,7 @@
def test_chrome_scroll_input_offsets(self):
return DiffTestBlueprint(
- trace=DataPath('scroll_offsets.pftrace'),
+ trace=DataPath('scroll_offsets_trace_2.pftrace'),
query="""
INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_offsets;
@@ -91,18 +91,19 @@
scroll_update_id,
ts,
delta_y,
- offset_y
+ relative_offset_y
FROM chrome_scroll_input_offsets
+ WHERE scroll_update_id IS NOT NULL
ORDER by ts
LIMIT 5;
""",
out=Csv("""
- "scroll_update_id","ts","delta_y","offset_y"
- 1983,4687296612739,-36.999939,-36.999939
- 1983,4687307175845,-39.000092,-76.000031
- 1987,4687313206739,-35.999969,-112.000000
- 1987,4687323152462,-35.000000,-147.000000
- 1991,4687329240739,-28.999969,-175.999969
+ "scroll_update_id","ts","delta_y","relative_offset_y"
+ 130,1349914859791,-6.932281,-308.342704
+ 132,1349923327791,-32.999954,-341.342659
+ 134,1349931893791,-39.999954,-381.342613
+ 140,1349956886791,-51.000046,-432.342659
+ 147,1349982489791,-89.808540,-522.151199
"""))
def test_chrome_janky_event_latencies_v3(self):
@@ -192,7 +193,7 @@
"""))
def test_chrome_presented_scroll_offsets(self):
return DiffTestBlueprint(
- trace=DataPath('scroll_offsets.pftrace'),
+ trace=DataPath('scroll_offsets_trace_2.pftrace'),
query="""
INCLUDE PERFETTO MODULE chrome.scroll_jank.scroll_offsets;
@@ -200,18 +201,19 @@
scroll_update_id,
ts,
delta_y,
- offset_y
+ relative_offset_y
FROM chrome_presented_scroll_offsets
+ WHERE scroll_update_id IS NOT NULL
ORDER by ts
LIMIT 5;
""",
out=Csv("""
- "scroll_update_id","ts","delta_y","offset_y"
- 1983,4687341817739,"[NULL]",0
- 1987,4687352950739,-50,-50
- 1991,4687364083739,-50,-100
- 1993,4687375224739,-81,-181
- 1996,4687386343739,-66,-247
+ "scroll_update_id","ts","delta_y","relative_offset_y"
+ 130,1349963342791,-6.932281,-6.932281
+ 132,1349985554791,-16.573090,-23.505371
+ 134,1349996680791,-107.517273,-131.022644
+ 140,1350007850791,-158.728424,-289.751068
+ 147,1350018935791,-89.808540,-379.559608
"""))
def test_scroll_jank_cause_map(self):