12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ui/aura/host_frame_rate_throttler.h"
- #include "base/containers/contains.h"
- #include "build/build_config.h"
- #include "components/viz/common/surfaces/frame_sink_id.h"
- #include "components/viz/host/host_frame_sink_manager.h"
- #include "ui/aura/env.h"
- #include "ui/aura/window_tree_host.h"
- #include "ui/compositor/compositor.h"
- namespace aura {
- #if BUILDFLAG(IS_WIN)
- constexpr uint8_t kDefaultThrottleFps = 1;
- #else
- constexpr uint8_t kDefaultThrottleFps = 20;
- #endif
- HostFrameRateThrottler& HostFrameRateThrottler::GetInstance() {
- static base::NoDestructor<HostFrameRateThrottler> instance;
- return *instance;
- }
- HostFrameRateThrottler::HostFrameRateThrottler() = default;
- HostFrameRateThrottler::~HostFrameRateThrottler() = default;
- void HostFrameRateThrottler::AddHost(WindowTreeHost* host) {
- if (base::Contains(hosts_, host))
- return;
- hosts_.insert(host);
- UpdateHostFrameSinkManager();
- }
- void HostFrameRateThrottler::RemoveHost(WindowTreeHost* host) {
- if (!base::Contains(hosts_, host))
- return;
- hosts_.erase(host);
- UpdateHostFrameSinkManager();
- }
- void HostFrameRateThrottler::UpdateHostFrameSinkManager() {
- std::vector<viz::FrameSinkId> ids;
- ids.reserve(hosts_.size());
- for (WindowTreeHost* host : hosts_)
- ids.push_back(host->compositor()->frame_sink_id());
- Env::GetInstance()->context_factory()->GetHostFrameSinkManager()->Throttle(
- ids, base::Hertz(kDefaultThrottleFps));
- }
- } // namespace aura
|