#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "content/renderer/render_thread_impl.h"
#include <atomic>
#include <limits>
#include <map>
#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/allocator/partition_alloc_support.h"
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/debug/crash_logging.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/discardable_memory_allocator.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/structured_shared_memory.h"
#include "base/message_loop/message_pump.h"
#include "base/message_loop/message_pump_type.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/histogram_macros_local.h"
#include "base/observer_list.h"
#include "base/path_service.h"
#include "base/process/process.h"
#include "base/process/process_metrics.h"
#include "base/ranges/algorithm.h"
#include "base/run_loop.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/synchronization/waitable_event.h"
#include "base/task/bind_post_task.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/single_thread_task_runner.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "base/threading/simple_thread.h"
#include "base/threading/thread_restrictions.h"
#include "base/trace_event/memory_dump_manager.h"
#include "base/trace_event/memory_pressure_level_proto.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/typed_macros.h"
#include "base/values.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "cc/base/histograms.h"
#include "cc/base/switches.h"
#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "cc/raster/task_graph_runner.h"
#include "cc/tiles/image_decode_cache_utils.h"
#include "cc/trees/layer_tree_frame_sink.h"
#include "cc/trees/layer_tree_settings.h"
#include "cc/trees/raster_context_provider_wrapper.h"
#include "components/discardable_memory/client/client_discardable_shared_memory_manager.h"
#include "components/metrics/public/mojom/single_sample_metrics.mojom.h"
#include "components/metrics/single_sample_metrics.h"
#include "components/viz/common/features.h"
#include "components/viz/common/frame_sinks/copy_output_request.h"
#include "components/viz/common/switches.h"
#include "content/child/runtime_features.h"
#include "content/common/buildflags.h"
#include "content/common/content_constants_internal.h"
#include "content/common/content_switches_internal.h"
#include "content/common/features.h"
#include "content/common/main_frame_counter.h"
#include "content/common/process_visibility_tracker.h"
#include "content/common/pseudonymization_salt.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_paths.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/gpu_stream_constants.h"
#include "content/public/common/url_constants.h"
#include "content/public/renderer/content_renderer_client.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread_observer.h"
#include "content/renderer/agent_scheduling_group.h"
#include "content/renderer/browser_exposed_renderer_interfaces.h"
#include "content/renderer/effective_connection_type_helper.h"
#include "content/renderer/media/codec_factory.h"
#include "content/renderer/media/gpu/gpu_video_accelerator_factories_impl.h"
#include "content/renderer/media/media_factory.h"
#include "content/renderer/media/render_media_client.h"
#include "content/renderer/net_info_helper.h"
#include "content/renderer/render_process_impl.h"
#include "content/renderer/renderer_blink_platform_impl.h"
#include "content/renderer/service_worker/service_worker_context_client.h"
#include "content/renderer/variations_render_thread_observer.h"
#include "content/renderer/worker/embedded_shared_worker_stub.h"
#include "content/renderer/worker/worker_thread_registry.h"
#include "device/gamepad/public/cpp/gamepads.h"
#include "gin/public/debug.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "gpu/command_buffer/client/context_support.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/client/raster_interface.h"
#include "gpu/command_buffer/client/shared_memory_limits.h"
#include "gpu/config/gpu_driver_bug_workarounds.h"
#include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_switches.h"
#include "gpu/ipc/client/client_shared_image_interface.h"
#include "gpu/ipc/client/command_buffer_proxy_impl.h"
#include "gpu/ipc/client/gpu_channel_host.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_channel_mojo.h"
#include "ipc/ipc_platform_file.h"
#include "media/base/decoder_factory.h"
#include "media/base/media.h"
#include "media/base/media_switches.h"
#include "media/media_buildflags.h"
#include "media/renderers/default_decoder_factory.h"
#include "media/video/gpu_video_accelerator_factories.h"
#include "mojo/public/cpp/bindings/binder_map.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "mojo/public/cpp/system/message_pipe.h"
#include "net/base/net_errors.h"
#include "net/base/port_util.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "net/base/url_util.h"
#include "ppapi/buildflags/buildflags.h"
#include "services/network/public/cpp/network_switches.h"
#include "services/service_manager/public/cpp/interface_provider.h"
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "services/viz/public/cpp/gpu/gpu.h"
#include "skia/ext/font_utils.h"
#include "skia/ext/skia_memory_dump_provider.h"
#include "third_party/abseil-cpp/absl/base/attributes.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/origin_trials/origin_trials_settings_provider.h"
#include "third_party/blink/public/common/page/launching_process_state.h"
#include "third_party/blink/public/common/switches.h"
#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
#include "third_party/blink/public/mojom/origin_trials/origin_trials_settings.mojom.h"
#include "third_party/blink/public/platform/modules/video_capture/web_video_capture_impl_manager.h"
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#include "third_party/blink/public/platform/web_cache.h"
#include "third_party/blink/public/platform/web_image_generator.h"
#include "third_party/blink/public/platform/web_memory_pressure_listener.h"
#include "third_party/blink/public/platform/web_network_state_notifier.h"
#include "third_party/blink/public/platform/web_runtime_features.h"
#include "third_party/blink/public/platform/web_scoped_page_pauser.h"
#include "third_party/blink/public/platform/web_string.h"
#include "third_party/blink/public/platform/web_theme_engine.h"
#include "third_party/blink/public/web/blink.h"
#include "third_party/blink/public/web/web_document.h"
#include "third_party/blink/public/web/web_frame.h"
#include "third_party/blink/public/web/web_render_theme.h"
#include "third_party/blink/public/web/web_security_policy.h"
#include "third_party/blink/public/web/web_user_level_memory_pressure_signal_generator.h"
#include "third_party/blink/public/web/web_v8_features.h"
#include "third_party/blink/public/web/web_view.h"
#include "third_party/skia/include/core/SkFontMgr.h"
#include "third_party/skia/include/core/SkGraphics.h"
#include "ui/base/ui_base_switches.h"
#include "ui/base/ui_base_switches_util.h"
#include "ui/display/display_switches.h"
#include "v8/include/v8-extension.h"
#if BUILDFLAG(IS_ANDROID)
#include <cpu-features.h>
#include "content/renderer/media/android/stream_texture_factory.h"
#include "media/base/android/media_codec_util.h"
#endif
#if BUILDFLAG(IS_MAC)
#include "base/mac/mac_util.h"
#include "content/renderer/theme_helper_mac.h"
#endif
#if BUILDFLAG(IS_WIN)
#include <objbase.h>
#include <windows.h>
#include "content/renderer/media/win/dcomp_texture_factory.h"
#include "content/renderer/media/win/overlay_state_service_provider.h"
#include "media/base/win/mf_feature_checks.h"
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
#include "content/child/sandboxed_process_thread_type_handler.h"
#endif
#ifdef ENABLE_VTUNE_JIT_INTERFACE
#include "v8/src/third_party/vtune/v8-vtune.h"
#endif
#if defined(ENABLE_IPC_FUZZER)
#include "content/common/external_ipc_dumper.h"
#include "mojo/public/cpp/bindings/message_dumper.h"
#endif
#if BUILDFLAG(IS_APPLE)
#include <malloc/malloc.h>
#else
#include <malloc.h>
#endif
#if BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
#include "content/renderer/media/codec_factory_mojo.h"
#include "media/mojo/mojom/interface_factory.mojom.h"
#endif
#if BUILDFLAG(IS_FUCHSIA)
#include "content/renderer/media/codec_factory_fuchsia.h"
#include "media/mojo/mojom/fuchsia_media.mojom.h"
#endif
#if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX)
#include "base/test/clang_profiling.h"
#endif
namespace content {
namespace {
PassKey;
WebDocument;
WebFrame;
WebNetworkStateNotifier;
WebRuntimeFeatures;
WebSecurityPolicy;
WebString;
WebView;
ABSL_CONST_INIT thread_local RenderThreadImpl* render_thread = …;
base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner>>::
DestructorAtExit g_main_task_runner = …;
static_assert …;
static_assert …;
static_assert …;
BASE_FEATURE(…);
void UpdateForegroundCrashKey(bool foreground) { … }
scoped_refptr<viz::ContextProviderCommandBuffer> CreateOffscreenContext(
scoped_refptr<gpu::GpuChannelHost> gpu_channel_host,
const gpu::SharedMemoryLimits& limits,
bool support_locking,
bool support_gles2_interface,
bool support_raster_interface,
bool support_oop_rasterization,
bool support_grcontext,
bool automatic_flushes,
viz::command_buffer_metrics::ContextType type,
int32_t stream_id,
gpu::SchedulingPriority stream_priority) { … }
void CreateSingleSampleMetricsProvider(
mojo::SharedRemote<mojom::ChildProcessHost> process_host,
mojo::PendingReceiver<metrics::mojom::SingleSampleMetricsProvider>
receiver) { … }
static bool IsSingleProcess() { … }
bool IsBackgrounded(std::optional<base::Process::Priority> process_priority) { … }
}
RenderThreadImpl::HistogramCustomizer::HistogramCustomizer() { … }
RenderThreadImpl::HistogramCustomizer::~HistogramCustomizer() { … }
void RenderThreadImpl::HistogramCustomizer::RenderViewNavigatedToHost(
const std::string& host,
size_t view_count) { … }
std::string RenderThreadImpl::HistogramCustomizer::ConvertToCustomHistogramName(
const char* histogram_name) const { … }
void RenderThreadImpl::HistogramCustomizer::SetCommonHost(
const std::string& host) { … }
std::string RenderThreadImpl::HistogramCustomizer::HostToCustomHistogramSuffix(
const std::string& host) { … }
bool RenderThreadImpl::HistogramCustomizer::IsAlexaTop10NonGoogleSite(
const std::string& host) { … }
RenderThreadImpl* RenderThreadImpl::current() { … }
scoped_refptr<base::SingleThreadTaskRunner>
RenderThreadImpl::DeprecatedGetMainTaskRunner() { … }
RenderThreadImpl::RenderThreadImpl(
const InProcessChildThreadParams& params,
int32_t client_id,
std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler)
: … { … }
namespace {
int32_t GetClientIdFromCommandLine() { … }
}
RenderThreadImpl::RenderThreadImpl(
base::RepeatingClosure quit_closure,
std::unique_ptr<blink::scheduler::WebThreadScheduler> scheduler)
: … { … }
void RenderThreadImpl::Init() { … }
RenderThreadImpl::~RenderThreadImpl() { … }
void RenderThreadImpl::Shutdown() { … }
bool RenderThreadImpl::ShouldBeDestroyed() { … }
IPC::SyncChannel* RenderThreadImpl::GetChannel() { … }
std::string RenderThreadImpl::GetLocale() { … }
#if BUILDFLAG(CONTENT_ENABLE_LEGACY_IPC)
IPC::SyncMessageFilter* RenderThreadImpl::GetSyncMessageFilter() {
return sync_message_filter();
}
void RenderThreadImpl::AddRoute(int32_t routing_id, IPC::Listener* listener) {
ChildThreadImpl::GetRouter()->AddRoute(routing_id, listener);
}
void RenderThreadImpl::AttachTaskRunnerToRoute(
int32_t routing_id,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
GetChannel()->AddListenerTaskRunner(routing_id, std::move(task_runner));
}
void RenderThreadImpl::RemoveRoute(int32_t routing_id) {
ChildThreadImpl::GetRouter()->RemoveRoute(routing_id);
GetChannel()->RemoveListenerTaskRunner(routing_id);
}
void RenderThreadImpl::AddFilter(IPC::MessageFilter* filter) {
channel()->AddFilter(filter);
}
void RenderThreadImpl::RemoveFilter(IPC::MessageFilter* filter) {
channel()->RemoveFilter(filter);
}
#endif
mojom::RendererHost* RenderThreadImpl::GetRendererHost() { … }
bool RenderThreadImpl::GenerateFrameRoutingID(
int32_t& routing_id,
blink::LocalFrameToken& frame_token,
base::UnguessableToken& devtools_frame_token,
blink::DocumentToken& document_token) { … }
void RenderThreadImpl::RequestNewItemsForFrameRoutingCache() { … }
void RenderThreadImpl::PopulateFrameRoutingCacheWithItems(
std::vector<mojom::FrameRoutingInfoPtr> infos) { … }
void RenderThreadImpl::AddObserver(RenderThreadObserver* observer) { … }
void RenderThreadImpl::RemoveObserver(RenderThreadObserver* observer) { … }
void RenderThreadImpl::InitializeCompositorThread() { … }
void RenderThreadImpl::InitializeWebKit(mojo::BinderMap* binders) { … }
void RenderThreadImpl::InitializeRenderer(
const std::string& user_agent,
const blink::UserAgentMetadata& user_agent_metadata,
const std::vector<std::string>& cors_exempt_header_list,
blink::mojom::OriginTrialsSettingsPtr origin_trials_settings) { … }
void RenderThreadImpl::RegisterSchemes() { … }
void RenderThreadImpl::RecordAction(const base::UserMetricsAction& action) { … }
void RenderThreadImpl::RecordComputedAction(const std::string& action) { … }
int RenderThreadImpl::PostTaskToAllWebWorkers(base::RepeatingClosure closure) { … }
media::GpuVideoAcceleratorFactories* RenderThreadImpl::GetGpuFactories() { … }
scoped_refptr<viz::RasterContextProvider>
RenderThreadImpl::GetVideoFrameCompositorContextProvider(
scoped_refptr<viz::RasterContextProvider> unwanted_context_provider) { … }
scoped_refptr<gpu::ClientSharedImageInterface>
RenderThreadImpl::GetVideoFrameCompositorSharedImageInterface() { … }
scoped_refptr<viz::ContextProviderCommandBuffer>
RenderThreadImpl::SharedMainThreadContextProvider() { … }
#if BUILDFLAG(IS_ANDROID)
scoped_refptr<StreamTextureFactory> RenderThreadImpl::GetStreamTexureFactory() {
DCHECK(IsMainThread());
if (!stream_texture_factory_ || stream_texture_factory_->IsLost()) {
scoped_refptr<gpu::GpuChannelHost> channel = EstablishGpuChannelSync();
if (!channel) {
stream_texture_factory_ = nullptr;
return nullptr;
}
stream_texture_factory_ = StreamTextureFactory::Create(std::move(channel));
}
return stream_texture_factory_;
}
bool RenderThreadImpl::EnableStreamTextureCopy() {
return GetContentClient()->UsingSynchronousCompositing();
}
#endif
#if BUILDFLAG(IS_WIN)
scoped_refptr<DCOMPTextureFactory> RenderThreadImpl::GetDCOMPTextureFactory() {
DCHECK(IsMainThread());
if (!dcomp_texture_factory_.get() || dcomp_texture_factory_->IsLost()) {
scoped_refptr<gpu::GpuChannelHost> channel = EstablishGpuChannelSync();
if (!channel) {
dcomp_texture_factory_ = nullptr;
return nullptr;
}
dcomp_texture_factory_ = DCOMPTextureFactory::Create(
std::move(channel), GetMediaSequencedTaskRunner());
}
return dcomp_texture_factory_;
}
OverlayStateServiceProvider*
RenderThreadImpl::GetOverlayStateServiceProvider() {
DCHECK(IsMainThread());
if (media::SupportMediaFoundationClearPlayback()) {
if (!overlay_state_service_provider_ ||
overlay_state_service_provider_->IsLost()) {
scoped_refptr<gpu::GpuChannelHost> channel = EstablishGpuChannelSync();
if (!channel) {
overlay_state_service_provider_ = nullptr;
return nullptr;
}
overlay_state_service_provider_ =
std::make_unique<OverlayStateServiceProviderImpl>(std::move(channel));
}
}
return overlay_state_service_provider_.get();
}
#endif
base::WaitableEvent* RenderThreadImpl::GetShutdownEvent() { … }
int32_t RenderThreadImpl::GetClientId() { … }
void RenderThreadImpl::SetRendererProcessType(
blink::scheduler::WebRendererProcessType type) { … }
blink::WebString RenderThreadImpl::GetUserAgent() { … }
const blink::UserAgentMetadata& RenderThreadImpl::GetUserAgentMetadata() { … }
void RenderThreadImpl::WriteIntoTrace(
perfetto::TracedProto<perfetto::protos::pbzero::RenderProcessHost> proto) { … }
void RenderThreadImpl::OnAssociatedInterfaceRequest(
const std::string& name,
mojo::ScopedInterfaceEndpointHandle handle) { … }
bool RenderThreadImpl::IsLcdTextEnabled() { … }
bool RenderThreadImpl::IsElasticOverscrollEnabled() { … }
gpu::GpuMemoryBufferManager* RenderThreadImpl::GetGpuMemoryBufferManager() { … }
blink::scheduler::WebThreadScheduler*
RenderThreadImpl::GetWebMainThreadScheduler() { … }
bool RenderThreadImpl::IsThreadedAnimationEnabled() { … }
bool RenderThreadImpl::IsScrollAnimatorEnabled() { … }
void RenderThreadImpl::SetScrollAnimatorEnabled(
bool enable_scroll_animator,
base::PassKey<AgentSchedulingGroup>) { … }
bool RenderThreadImpl::IsMainThread() { … }
void RenderThreadImpl::OnChannelError() { … }
void RenderThreadImpl::OnProcessFinalRelease() { … }
#if BUILDFLAG(CONTENT_ENABLE_LEGACY_IPC)
bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) {
for (auto& observer : observers_) {
if (observer.OnControlMessageReceived(msg))
return true;
}
return false;
}
#endif
void RenderThreadImpl::SetProcessState(
base::Process::Priority process_priority,
mojom::RenderProcessVisibleState visible_state) { … }
void RenderThreadImpl::SetBatterySaverMode(bool battery_saver_mode_enabled) { … }
void RenderThreadImpl::SetIsLockedToSite() { … }
#if BUILDFLAG(CLANG_PROFILING_INSIDE_SANDBOX)
void RenderThreadImpl::WriteClangProfilingProfile(
WriteClangProfilingProfileCallback callback) {
base::WriteClangProfilingProfile();
std::move(callback).Run();
}
#endif
void RenderThreadImpl::SetIsCrossOriginIsolated(bool value) { … }
void RenderThreadImpl::SetIsWebSecurityDisabled(bool value) { … }
void RenderThreadImpl::SetIsIsolatedContext(bool value) { … }
void RenderThreadImpl::CompositingModeFallbackToSoftware() { … }
bool RenderThreadImpl::IsGpuRemoteDisconnected() { … }
scoped_refptr<gpu::GpuChannelHost> RenderThreadImpl::EstablishGpuChannelSync() { … }
void RenderThreadImpl::EstablishGpuChannel(
EstablishGpuChannelCallback callback) { … }
blink::AssociatedInterfaceRegistry*
RenderThreadImpl::GetAssociatedInterfaceRegistry() { … }
mojom::RenderMessageFilter* RenderThreadImpl::render_message_filter() { … }
gpu::GpuChannelHost* RenderThreadImpl::GetGpuChannel() { … }
void RenderThreadImpl::CreateAgentSchedulingGroup(
mojo::PendingReceiver<IPC::mojom::ChannelBootstrap> bootstrap) { … }
void RenderThreadImpl::CreateAssociatedAgentSchedulingGroup(
mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup>
agent_scheduling_group) { … }
void RenderThreadImpl::TransferSharedLastForegroundTime(
base::ReadOnlySharedMemoryRegion last_foreground_time_region) { … }
void RenderThreadImpl::OnNetworkConnectionChanged(
net::NetworkChangeNotifier::ConnectionType type,
double max_bandwidth_mbps) { … }
void RenderThreadImpl::OnNetworkQualityChanged(
net::EffectiveConnectionType type,
base::TimeDelta http_rtt,
base::TimeDelta transport_rtt,
double downlink_throughput_kbps) { … }
void RenderThreadImpl::SetWebKitSharedTimersSuspended(bool suspend) { … }
void RenderThreadImpl::UpdateScrollbarTheme(
mojom::UpdateScrollbarThemeParamsPtr params) { … }
void RenderThreadImpl::OnSystemColorsChanged(int32_t aqua_color_variant) { … }
void RenderThreadImpl::UpdateSystemColorInfo(
mojom::UpdateSystemColorInfoParamsPtr params) { … }
void RenderThreadImpl::PurgePluginListCache(bool reload_pages) { … }
void RenderThreadImpl::PurgeResourceCache(PurgeResourceCacheCallback callback) { … }
void RenderThreadImpl::OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { … }
scoped_refptr<base::SequencedTaskRunner>
RenderThreadImpl::GetMediaSequencedTaskRunner() { … }
scoped_refptr<cc::RasterContextProviderWrapper>
RenderThreadImpl::SharedCompositorWorkerContextProvider(
cc::RasterDarkModeFilter* dark_mode_filter) { … }
bool RenderThreadImpl::RendererIsHidden() const { … }
void RenderThreadImpl::OnRendererHidden() { … }
void RenderThreadImpl::OnRendererVisible() { … }
bool RenderThreadImpl::RendererIsBackgrounded() const { … }
void RenderThreadImpl::OnRendererBackgrounded() { … }
void RenderThreadImpl::OnRendererForegrounded() { … }
void RenderThreadImpl::ReleaseFreeMemory() { … }
void RenderThreadImpl::OnSyncMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { … }
void RenderThreadImpl::OnRendererInterfaceReceiver(
mojo::PendingAssociatedReceiver<mojom::Renderer> receiver) { … }
void RenderThreadImpl::SetRenderingColorSpace(
const gfx::ColorSpace& color_space) { … }
gfx::ColorSpace RenderThreadImpl::GetRenderingColorSpace() { … }
std::unique_ptr<CodecFactory> RenderThreadImpl::CreateMediaCodecFactory(
scoped_refptr<viz::ContextProviderCommandBuffer> context_provider,
bool enable_video_decode_accelerator,
bool enable_video_encode_accelerator) { … }
#if BUILDFLAG(IS_ANDROID)
void RenderThreadImpl::SetPrivateMemoryFootprint(
uint64_t private_memory_footprint_bytes) {
GetRendererHost()->SetPrivateMemoryFootprint(private_memory_footprint_bytes);
}
void RenderThreadImpl::OnMemoryPressureFromBrowserReceived(
base::MemoryPressureListener::MemoryPressureLevel level) {
if (!blink_platform_impl_) {
return;
}
blink::RequestUserLevelMemoryPressureSignal();
}
#endif
}