Move performance scenario shared memory functions to a new file
This simplifies the core API in performance_scenarios.h by separating out functions that are only used by the embedder to set up the scenario system. Bug: 365586676 Change-Id: Ie3df73686ac475172ac4b51b605776578509ed63 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6386727 Reviewed-by: Patrick Monette <pmonette@chromium.org> Auto-Submit: Joe Mason <joenotcharles@google.com> Commit-Queue: Joe Mason <joenotcharles@google.com> Reviewed-by: Kentaro Hara <haraken@chromium.org> Cr-Commit-Position: refs/heads/main@{#1438138}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
979c6f4f32
commit
f01ea09d5c
components/performance_manager
embedder
scenario_api
BUILD.gnperformance_scenario_memory.ccperformance_scenario_memory.hperformance_scenario_memory_forward.hperformance_scenario_observer.ccperformance_scenario_observer.hperformance_scenario_observer_unittest.ccperformance_scenarios.ccperformance_scenarios.hperformance_scenarios_unittest.cc
scenarios
content/child
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
|
|
||||||
namespace base {
|
namespace base {
|
||||||
class SharedMemoryMapper;
|
class SharedMemoryMapper;
|
||||||
|
@@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
component("scenario_api") {
|
component("scenario_api") {
|
||||||
sources = [
|
sources = [
|
||||||
|
"performance_scenario_memory.cc",
|
||||||
|
"performance_scenario_memory.h",
|
||||||
|
"performance_scenario_memory_forward.h",
|
||||||
"performance_scenario_observer.cc",
|
"performance_scenario_observer.cc",
|
||||||
"performance_scenario_observer.h",
|
"performance_scenario_observer.h",
|
||||||
"performance_scenarios.cc",
|
"performance_scenarios.cc",
|
||||||
|
@@ -0,0 +1,72 @@
|
|||||||
|
// Copyright 2025 The Chromium Authors
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
#include "base/memory/read_only_shared_memory_region.h"
|
||||||
|
#include "base/memory/scoped_refptr.h"
|
||||||
|
#include "base/memory/structured_shared_memory.h"
|
||||||
|
#include "base/no_destructor.h"
|
||||||
|
#include "base/notreached.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
|
|
||||||
|
namespace performance_scenarios {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
// Global pointers to the shared memory mappings.
|
||||||
|
scoped_refptr<RefCountedScenarioMapping>& MappingPtrForScope(
|
||||||
|
ScenarioScope scope) {
|
||||||
|
static base::NoDestructor<scoped_refptr<RefCountedScenarioMapping>>
|
||||||
|
current_process_mapping;
|
||||||
|
static base::NoDestructor<scoped_refptr<RefCountedScenarioMapping>>
|
||||||
|
global_mapping;
|
||||||
|
switch (scope) {
|
||||||
|
case ScenarioScope::kCurrentProcess:
|
||||||
|
return *current_process_mapping;
|
||||||
|
case ScenarioScope::kGlobal:
|
||||||
|
return *global_mapping;
|
||||||
|
}
|
||||||
|
NOTREACHED();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
// TODO(crbug.com/365586676): Currently these are only mapped into browser and
|
||||||
|
// renderer processes. The global scenarios should also be mapped into utility
|
||||||
|
// processes.
|
||||||
|
|
||||||
|
ScopedReadOnlyScenarioMemory::ScopedReadOnlyScenarioMemory(
|
||||||
|
ScenarioScope scope,
|
||||||
|
base::ReadOnlySharedMemoryRegion region)
|
||||||
|
: scope_(scope) {
|
||||||
|
using SharedScenarioState = base::StructuredSharedMemory<ScenarioState>;
|
||||||
|
std::optional<SharedScenarioState::ReadOnlyMapping> mapping =
|
||||||
|
SharedScenarioState::MapReadOnlyRegion(std::move(region));
|
||||||
|
if (mapping.has_value()) {
|
||||||
|
MappingPtrForScope(scope_) =
|
||||||
|
base::MakeRefCounted<RefCountedScenarioMapping>(
|
||||||
|
std::move(mapping.value()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// The ObserverList must be created after mapping the memory, because it reads
|
||||||
|
// the scenario state in its constructor.
|
||||||
|
PerformanceScenarioObserverList::CreateForScope(PassKey(), scope_);
|
||||||
|
}
|
||||||
|
|
||||||
|
ScopedReadOnlyScenarioMemory::~ScopedReadOnlyScenarioMemory() {
|
||||||
|
PerformanceScenarioObserverList::DestroyForScope(PassKey(), scope_);
|
||||||
|
MappingPtrForScope(scope_).reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
scoped_refptr<RefCountedScenarioMapping> GetScenarioMappingForScope(
|
||||||
|
ScenarioScope scope) {
|
||||||
|
return MappingPtrForScope(scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace performance_scenarios
|
@@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2025 The Chromium Authors
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_H_
|
||||||
|
#define COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_H_
|
||||||
|
|
||||||
|
#include "base/component_export.h"
|
||||||
|
#include "base/memory/read_only_shared_memory_region.h"
|
||||||
|
#include "base/memory/scoped_refptr.h"
|
||||||
|
#include "base/memory/shared_memory_safety_checker.h"
|
||||||
|
#include "base/types/pass_key.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory_forward.h" // IWYU pragma: export
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
|
|
||||||
|
namespace performance_scenarios {
|
||||||
|
|
||||||
|
// The full scenario state to copy over shared memory.
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic error "-Wpadded"
|
||||||
|
struct COMPONENT_EXPORT(SCENARIO_API) ScenarioState {
|
||||||
|
base::subtle::SharedAtomic<LoadingScenario> loading;
|
||||||
|
base::subtle::SharedAtomic<InputScenario> input;
|
||||||
|
};
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
|
||||||
|
// A scoped object that maps shared memory for the scenario state into the
|
||||||
|
// current process as long as it exists.
|
||||||
|
class COMPONENT_EXPORT(SCENARIO_API) ScopedReadOnlyScenarioMemory {
|
||||||
|
public:
|
||||||
|
// Maps `region` into the current process, as a read-only view of the memory
|
||||||
|
// holding the scenario state for `scope`.
|
||||||
|
ScopedReadOnlyScenarioMemory(ScenarioScope scope,
|
||||||
|
base::ReadOnlySharedMemoryRegion region);
|
||||||
|
~ScopedReadOnlyScenarioMemory();
|
||||||
|
|
||||||
|
ScopedReadOnlyScenarioMemory(const ScopedReadOnlyScenarioMemory&) = delete;
|
||||||
|
ScopedReadOnlyScenarioMemory& operator=(const ScopedReadOnlyScenarioMemory&) =
|
||||||
|
delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
using PassKey = base::PassKey<ScopedReadOnlyScenarioMemory>;
|
||||||
|
ScenarioScope scope_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a pointer to the shared memory mapping registered for `scope`, or
|
||||||
|
// nullptr if there isn't any.
|
||||||
|
COMPONENT_EXPORT(SCENARIO_API)
|
||||||
|
scoped_refptr<RefCountedScenarioMapping> GetScenarioMappingForScope(
|
||||||
|
ScenarioScope scope);
|
||||||
|
|
||||||
|
} // namespace performance_scenarios
|
||||||
|
|
||||||
|
#endif // COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_H_
|
@@ -0,0 +1,29 @@
|
|||||||
|
// Copyright 2025 The Chromium Authors
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_FORWARD_H_
|
||||||
|
#define COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_FORWARD_H_
|
||||||
|
|
||||||
|
#include "base/memory/ref_counted.h"
|
||||||
|
#include "base/memory/structured_shared_memory.h"
|
||||||
|
|
||||||
|
namespace performance_scenarios {
|
||||||
|
|
||||||
|
// The full scenario state to copy over shared memory.
|
||||||
|
struct ScenarioState;
|
||||||
|
|
||||||
|
// A scoped object that maps shared memory for the scenario state into the
|
||||||
|
// current process as long as it exists.
|
||||||
|
class ScopedReadOnlyScenarioMemory;
|
||||||
|
|
||||||
|
// Pointers to the mapped shared memory are held in thread-safe scoped_refptr's.
|
||||||
|
// The memory will be unmapped when the final reference is dropped. Functions
|
||||||
|
// that copy values out of the shared memory must hold a reference to it so that
|
||||||
|
// it's not unmapped while reading.
|
||||||
|
using RefCountedScenarioMapping = base::RefCountedData<
|
||||||
|
base::StructuredSharedMemory<ScenarioState>::ReadOnlyMapping>;
|
||||||
|
|
||||||
|
} // namespace performance_scenarios
|
||||||
|
|
||||||
|
#endif // COMPONENTS_PERFORMANCE_MANAGER_SCENARIO_API_PERFORMANCE_SCENARIO_MEMORY_FORWARD_H_
|
@@ -12,8 +12,10 @@
|
|||||||
#include "base/no_destructor.h"
|
#include "base/no_destructor.h"
|
||||||
#include "base/notreached.h"
|
#include "base/notreached.h"
|
||||||
#include "base/observer_list.h"
|
#include "base/observer_list.h"
|
||||||
|
#include "base/sequence_checker.h"
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "base/types/pass_key.h"
|
#include "base/types/pass_key.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
|
|
||||||
namespace performance_scenarios {
|
namespace performance_scenarios {
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include "base/sequence_checker.h"
|
#include "base/sequence_checker.h"
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "base/types/pass_key.h"
|
#include "base/types/pass_key.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory_forward.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
|
|
||||||
namespace performance_scenarios {
|
namespace performance_scenarios {
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include "base/scoped_multi_source_observation.h"
|
#include "base/scoped_multi_source_observation.h"
|
||||||
#include "base/test/gmock_callback_support.h"
|
#include "base/test/gmock_callback_support.h"
|
||||||
#include "base/test/task_environment.h"
|
#include "base/test/task_environment.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "testing/gmock/include/gmock/gmock.h"
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
@@ -4,38 +4,17 @@
|
|||||||
|
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
|
|
||||||
#include <optional>
|
#include <atomic>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "base/memory/read_only_shared_memory_region.h"
|
#include "base/containers/enum_set.h"
|
||||||
#include "base/memory/ref_counted.h"
|
|
||||||
#include "base/memory/scoped_refptr.h"
|
#include "base/memory/scoped_refptr.h"
|
||||||
#include "base/memory/structured_shared_memory.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "base/no_destructor.h"
|
|
||||||
#include "base/notreached.h"
|
|
||||||
#include "base/types/pass_key.h"
|
|
||||||
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
|
||||||
|
|
||||||
namespace performance_scenarios {
|
namespace performance_scenarios {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
// Global pointers to the shared memory mappings.
|
|
||||||
scoped_refptr<RefCountedScenarioMapping>& MappingPtrForScope(
|
|
||||||
ScenarioScope scope) {
|
|
||||||
static base::NoDestructor<scoped_refptr<RefCountedScenarioMapping>>
|
|
||||||
current_process_mapping;
|
|
||||||
static base::NoDestructor<scoped_refptr<RefCountedScenarioMapping>>
|
|
||||||
global_mapping;
|
|
||||||
switch (scope) {
|
|
||||||
case ScenarioScope::kCurrentProcess:
|
|
||||||
return *current_process_mapping;
|
|
||||||
case ScenarioScope::kGlobal:
|
|
||||||
return *global_mapping;
|
|
||||||
}
|
|
||||||
NOTREACHED();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the scenario state from `mapping`, or a default empty state if
|
// Returns the scenario state from `mapping`, or a default empty state if
|
||||||
// `mapping` is null (which can happen if no ScopedReadOnlyScenarioMemory exists
|
// `mapping` is null (which can happen if no ScopedReadOnlyScenarioMemory exists
|
||||||
// or if the mapping failed). Takes a raw pointer instead of a scoped_ptr to
|
// or if the mapping failed). Takes a raw pointer instead of a scoped_ptr to
|
||||||
@@ -48,51 +27,20 @@ const ScenarioState& GetScenarioStateFromMapping(
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// TODO(crbug.com/365586676): Currently these are only mapped into browser and
|
|
||||||
// renderer processes. The global scenarios should also be mapped into utility
|
|
||||||
// processes.
|
|
||||||
|
|
||||||
ScopedReadOnlyScenarioMemory::ScopedReadOnlyScenarioMemory(
|
|
||||||
ScenarioScope scope,
|
|
||||||
base::ReadOnlySharedMemoryRegion region)
|
|
||||||
: scope_(scope) {
|
|
||||||
using SharedScenarioState = base::StructuredSharedMemory<ScenarioState>;
|
|
||||||
std::optional<SharedScenarioState::ReadOnlyMapping> mapping =
|
|
||||||
SharedScenarioState::MapReadOnlyRegion(std::move(region));
|
|
||||||
if (mapping.has_value()) {
|
|
||||||
MappingPtrForScope(scope_) =
|
|
||||||
base::MakeRefCounted<RefCountedScenarioMapping>(
|
|
||||||
std::move(mapping.value()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// The ObserverList must be created after mapping the memory, because it reads
|
|
||||||
// the scenario state in its constructor.
|
|
||||||
PerformanceScenarioObserverList::CreateForScope(
|
|
||||||
base::PassKey<ScopedReadOnlyScenarioMemory>(), scope_);
|
|
||||||
}
|
|
||||||
|
|
||||||
ScopedReadOnlyScenarioMemory::~ScopedReadOnlyScenarioMemory() {
|
|
||||||
PerformanceScenarioObserverList::DestroyForScope(
|
|
||||||
base::PassKey<ScopedReadOnlyScenarioMemory>(), scope_);
|
|
||||||
MappingPtrForScope(scope_).reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
scoped_refptr<RefCountedScenarioMapping>
|
|
||||||
ScopedReadOnlyScenarioMemory::GetMappingForTesting(ScenarioScope scope) {
|
|
||||||
return MappingPtrForScope(scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
SharedAtomicRef<LoadingScenario> GetLoadingScenario(ScenarioScope scope) {
|
SharedAtomicRef<LoadingScenario> GetLoadingScenario(ScenarioScope scope) {
|
||||||
scoped_refptr<RefCountedScenarioMapping> mapping = MappingPtrForScope(scope);
|
scoped_refptr<RefCountedScenarioMapping> mapping =
|
||||||
return SharedAtomicRef<LoadingScenario>(
|
GetScenarioMappingForScope(scope);
|
||||||
mapping, GetScenarioStateFromMapping(mapping.get()).loading);
|
const std::atomic<LoadingScenario>& scenario =
|
||||||
|
GetScenarioStateFromMapping(mapping.get()).loading;
|
||||||
|
return SharedAtomicRef<LoadingScenario>(std::move(mapping), scenario);
|
||||||
}
|
}
|
||||||
|
|
||||||
SharedAtomicRef<InputScenario> GetInputScenario(ScenarioScope scope) {
|
SharedAtomicRef<InputScenario> GetInputScenario(ScenarioScope scope) {
|
||||||
scoped_refptr<RefCountedScenarioMapping> mapping = MappingPtrForScope(scope);
|
scoped_refptr<RefCountedScenarioMapping> mapping =
|
||||||
return SharedAtomicRef<InputScenario>(
|
GetScenarioMappingForScope(scope);
|
||||||
mapping, GetScenarioStateFromMapping(mapping.get()).input);
|
const std::atomic<InputScenario>& scenario =
|
||||||
|
GetScenarioStateFromMapping(mapping.get()).input;
|
||||||
|
return SharedAtomicRef<InputScenario>(std::move(mapping), scenario);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CurrentScenariosMatch(ScenarioScope scope, ScenarioPattern pattern) {
|
bool CurrentScenariosMatch(ScenarioScope scope, ScenarioPattern pattern) {
|
||||||
|
@@ -11,11 +11,8 @@
|
|||||||
#include "base/component_export.h"
|
#include "base/component_export.h"
|
||||||
#include "base/containers/enum_set.h"
|
#include "base/containers/enum_set.h"
|
||||||
#include "base/memory/raw_ptr_exclusion.h"
|
#include "base/memory/raw_ptr_exclusion.h"
|
||||||
#include "base/memory/read_only_shared_memory_region.h"
|
|
||||||
#include "base/memory/ref_counted.h"
|
|
||||||
#include "base/memory/scoped_refptr.h"
|
#include "base/memory/scoped_refptr.h"
|
||||||
#include "base/memory/shared_memory_safety_checker.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory_forward.h"
|
||||||
#include "base/memory/structured_shared_memory.h"
|
|
||||||
|
|
||||||
namespace performance_scenarios {
|
namespace performance_scenarios {
|
||||||
|
|
||||||
@@ -97,24 +94,6 @@ inline constexpr ScenarioPattern kDefaultIdleScenarios{
|
|||||||
.input = {InputScenario::kNoInput},
|
.input = {InputScenario::kNoInput},
|
||||||
};
|
};
|
||||||
|
|
||||||
// The full scenario state to copy over shared memory.
|
|
||||||
// TODO(crbug.com/365586676): Move this to a separate header since it's part of
|
|
||||||
// the plumbing, not the general API.
|
|
||||||
#pragma clang diagnostic push
|
|
||||||
#pragma clang diagnostic error "-Wpadded"
|
|
||||||
struct COMPONENT_EXPORT(SCENARIO_API) ScenarioState {
|
|
||||||
base::subtle::SharedAtomic<LoadingScenario> loading;
|
|
||||||
base::subtle::SharedAtomic<InputScenario> input;
|
|
||||||
};
|
|
||||||
#pragma clang diagnostic pop
|
|
||||||
|
|
||||||
// Pointers to the mapped shared memory are held in thread-safe scoped_refptr's.
|
|
||||||
// The memory will be unmapped when the final reference is dropped. Functions
|
|
||||||
// that copy values out of the shared memory must hold a reference to it so that
|
|
||||||
// it's not unmapped while reading.
|
|
||||||
using RefCountedScenarioMapping = base::RefCountedData<
|
|
||||||
base::StructuredSharedMemory<ScenarioState>::ReadOnlyMapping>;
|
|
||||||
|
|
||||||
// A wrapper around a std::atomic<T> that's stored in shared memory. The wrapper
|
// A wrapper around a std::atomic<T> that's stored in shared memory. The wrapper
|
||||||
// prevents the shared memory from being unmapped while a caller has a reference
|
// prevents the shared memory from being unmapped while a caller has a reference
|
||||||
// to the atomic. Dereference the SharedAtomicRef to read from it as a
|
// to the atomic. Dereference the SharedAtomicRef to read from it as a
|
||||||
@@ -152,30 +131,6 @@ class SharedAtomicRef {
|
|||||||
RAW_PTR_EXCLUSION const std::atomic<T>& wrapped_atomic_;
|
RAW_PTR_EXCLUSION const std::atomic<T>& wrapped_atomic_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A scoped object that maps shared memory for the scenario state into the
|
|
||||||
// current process as long as it exists.
|
|
||||||
// TODO(crbug.com/365586676): Move this to a separate header since it's part of
|
|
||||||
// the plumbing, not the general API.
|
|
||||||
class COMPONENT_EXPORT(SCENARIO_API) ScopedReadOnlyScenarioMemory {
|
|
||||||
public:
|
|
||||||
// Maps `region` into the current process, as a read-only view of the memory
|
|
||||||
// holding the scenario state for `scope`.
|
|
||||||
ScopedReadOnlyScenarioMemory(ScenarioScope scope,
|
|
||||||
base::ReadOnlySharedMemoryRegion region);
|
|
||||||
~ScopedReadOnlyScenarioMemory();
|
|
||||||
|
|
||||||
ScopedReadOnlyScenarioMemory(const ScopedReadOnlyScenarioMemory&) = delete;
|
|
||||||
ScopedReadOnlyScenarioMemory& operator=(const ScopedReadOnlyScenarioMemory&) =
|
|
||||||
delete;
|
|
||||||
|
|
||||||
// Returns a pointer to the mapping registered for `scope`, if any.
|
|
||||||
static scoped_refptr<RefCountedScenarioMapping> GetMappingForTesting(
|
|
||||||
ScenarioScope scope);
|
|
||||||
|
|
||||||
private:
|
|
||||||
ScenarioScope scope_;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Functions to query performance scenarios.
|
// Functions to query performance scenarios.
|
||||||
//
|
//
|
||||||
// Since the scenarios can be modified at any time from another process, they're
|
// Since the scenarios can be modified at any time from another process, they're
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "base/memory/read_only_shared_memory_region.h"
|
#include "base/memory/read_only_shared_memory_region.h"
|
||||||
#include "base/memory/scoped_refptr.h"
|
#include "base/memory/scoped_refptr.h"
|
||||||
#include "base/memory/structured_shared_memory.h"
|
#include "base/memory/structured_shared_memory.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
namespace performance_scenarios {
|
namespace performance_scenarios {
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include "components/performance_manager/public/graph/graph.h"
|
#include "components/performance_manager/public/graph/graph.h"
|
||||||
#include "components/performance_manager/public/graph/process_node.h"
|
#include "components/performance_manager/public/graph/process_node.h"
|
||||||
#include "components/performance_manager/public/performance_manager.h"
|
#include "components/performance_manager/public/performance_manager.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
||||||
|
@@ -18,6 +18,7 @@
|
|||||||
#include "components/performance_manager/public/graph/graph.h"
|
#include "components/performance_manager/public/graph/graph.h"
|
||||||
#include "components/performance_manager/public/graph/process_node.h"
|
#include "components/performance_manager/public/graph/process_node.h"
|
||||||
#include "components/performance_manager/public/performance_manager.h"
|
#include "components/performance_manager/public/performance_manager.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_observer.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include "components/performance_manager/graph/graph_impl.h"
|
#include "components/performance_manager/graph/graph_impl.h"
|
||||||
#include "components/performance_manager/graph/page_node_impl.h"
|
#include "components/performance_manager/graph/page_node_impl.h"
|
||||||
#include "components/performance_manager/graph/process_node_impl.h"
|
#include "components/performance_manager/graph/process_node_impl.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "components/performance_manager/scenarios/browser_performance_scenarios.h"
|
#include "components/performance_manager/scenarios/browser_performance_scenarios.h"
|
||||||
#include "components/performance_manager/test_support/graph_test_harness.h"
|
#include "components/performance_manager/test_support/graph_test_harness.h"
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "base/memory/structured_shared_memory.h"
|
#include "base/memory/structured_shared_memory.h"
|
||||||
#include "components/performance_manager/graph/process_node_impl.h"
|
#include "components/performance_manager/graph/process_node_impl.h"
|
||||||
#include "components/performance_manager/public/tracing_support.h"
|
#include "components/performance_manager/public/tracing_support.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "third_party/perfetto/include/perfetto/tracing/track.h"
|
#include "third_party/perfetto/include/perfetto/tracing/track.h"
|
||||||
|
|
||||||
namespace performance_manager {
|
namespace performance_manager {
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "base/memory/structured_shared_memory.h"
|
#include "base/memory/structured_shared_memory.h"
|
||||||
#include "base/types/optional_util.h"
|
#include "base/types/optional_util.h"
|
||||||
#include "components/performance_manager/graph/node_inline_data.h"
|
#include "components/performance_manager/graph/node_inline_data.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory_forward.h"
|
||||||
#include "third_party/perfetto/include/perfetto/tracing/track.h"
|
#include "third_party/perfetto/include/perfetto/tracing/track.h"
|
||||||
|
|
||||||
namespace base {
|
namespace base {
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "base/memory/shared_memory_mapper.h"
|
#include "base/memory/shared_memory_mapper.h"
|
||||||
#include "base/memory/structured_shared_memory.h"
|
#include "base/memory/structured_shared_memory.h"
|
||||||
#include "base/types/pass_key.h"
|
#include "base/types/pass_key.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "components/performance_manager/scenarios/browser_performance_scenarios.h"
|
#include "components/performance_manager/scenarios/browser_performance_scenarios.h"
|
||||||
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
#include "components/performance_manager/scenarios/performance_scenario_data.h"
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "base/memory/weak_ptr.h"
|
#include "base/memory/weak_ptr.h"
|
||||||
#include "base/sequence_checker.h"
|
#include "base/sequence_checker.h"
|
||||||
#include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
|
#include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "content/common/content_export.h"
|
#include "content/common/content_export.h"
|
||||||
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
||||||
#include "mojo/public/cpp/bindings/remote.h"
|
#include "mojo/public/cpp/bindings/remote.h"
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include "base/task/sequenced_task_runner.h"
|
#include "base/task/sequenced_task_runner.h"
|
||||||
#include "base/test/task_environment.h"
|
#include "base/test/task_environment.h"
|
||||||
#include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
|
#include "components/performance_manager/public/mojom/coordination_unit.mojom.h"
|
||||||
|
#include "components/performance_manager/scenario_api/performance_scenario_memory.h"
|
||||||
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
#include "components/performance_manager/scenario_api/performance_scenarios.h"
|
||||||
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
||||||
#include "mojo/public/cpp/bindings/receiver.h"
|
#include "mojo/public/cpp/bindings/receiver.h"
|
||||||
@@ -26,7 +27,6 @@ namespace {
|
|||||||
using performance_manager::mojom::ChildProcessCoordinationUnit;
|
using performance_manager::mojom::ChildProcessCoordinationUnit;
|
||||||
using performance_scenarios::ScenarioScope;
|
using performance_scenarios::ScenarioScope;
|
||||||
using performance_scenarios::ScenarioState;
|
using performance_scenarios::ScenarioState;
|
||||||
using performance_scenarios::ScopedReadOnlyScenarioMemory;
|
|
||||||
using ::testing::_;
|
using ::testing::_;
|
||||||
using ::testing::Invoke;
|
using ::testing::Invoke;
|
||||||
|
|
||||||
@@ -101,9 +101,9 @@ TEST_F(ChildPerformanceCoordinatorTest, NoScenarioRegion) {
|
|||||||
base::ReadOnlySharedMemoryRegion(),
|
base::ReadOnlySharedMemoryRegion(),
|
||||||
base::ReadOnlySharedMemoryRegion());
|
base::ReadOnlySharedMemoryRegion());
|
||||||
|
|
||||||
EXPECT_FALSE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_FALSE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kGlobal));
|
ScenarioScope::kGlobal));
|
||||||
EXPECT_FALSE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_FALSE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kCurrentProcess));
|
ScenarioScope::kCurrentProcess));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,9 +116,9 @@ TEST_F(ChildPerformanceCoordinatorTest, GlobalScenarioRegion) {
|
|||||||
shared_memory->TakeReadOnlyRegion(),
|
shared_memory->TakeReadOnlyRegion(),
|
||||||
base::ReadOnlySharedMemoryRegion());
|
base::ReadOnlySharedMemoryRegion());
|
||||||
|
|
||||||
EXPECT_TRUE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_TRUE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kGlobal));
|
ScenarioScope::kGlobal));
|
||||||
EXPECT_FALSE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_FALSE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kCurrentProcess));
|
ScenarioScope::kCurrentProcess));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,9 +131,9 @@ TEST_F(ChildPerformanceCoordinatorTest, ProcessScenarioRegion) {
|
|||||||
base::ReadOnlySharedMemoryRegion(),
|
base::ReadOnlySharedMemoryRegion(),
|
||||||
shared_memory->TakeReadOnlyRegion());
|
shared_memory->TakeReadOnlyRegion());
|
||||||
|
|
||||||
EXPECT_FALSE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_FALSE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kGlobal));
|
ScenarioScope::kGlobal));
|
||||||
EXPECT_TRUE(ScopedReadOnlyScenarioMemory::GetMappingForTesting(
|
EXPECT_TRUE(performance_scenarios::GetScenarioMappingForScope(
|
||||||
ScenarioScope::kCurrentProcess));
|
ScenarioScope::kCurrentProcess));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user