Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: content/browser/compositor/browser_compositor_view_mac.mm

Issue 1841153002: BrowserCompositorMac, ResizeLock, DelegatedFrameHost => content/browser/renderer_host (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Mac Build Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/compositor/browser_compositor_view_mac.h"
6
7 #include <stdint.h>
8
9 #include <utility>
10
11 #include "base/lazy_instance.h"
12 #include "base/trace_event/trace_event.h"
13 #include "content/browser/compositor/image_transport_factory.h"
14 #include "content/public/browser/context_factory.h"
15 #include "ui/accelerated_widget_mac/accelerated_widget_mac.h"
16 #include "ui/accelerated_widget_mac/window_resize_helper_mac.h"
17
18 ////////////////////////////////////////////////////////////////////////////////
19 // BrowserCompositorMac
20
21 namespace content {
22
23 namespace {
24
25 // Set when no browser compositors should remain alive.
26 bool g_has_shut_down = false;
27
28 // The number of placeholder objects allocated. If this reaches zero, then
29 // the BrowserCompositorMac being held on to for recycling,
30 // |g_recyclable_browser_compositor|, will be freed.
31 uint32_t g_placeholder_count = 0;
32
33 // A spare BrowserCompositorMac kept around for recycling.
34 base::LazyInstance<scoped_ptr<BrowserCompositorMac>>
35 g_recyclable_browser_compositor;
36
37 } // namespace
38
39 BrowserCompositorMac::BrowserCompositorMac()
40 : accelerated_widget_mac_(new ui::AcceleratedWidgetMac()),
41 compositor_(content::GetContextFactory(),
42 ui::WindowResizeHelperMac::Get()->task_runner()) {
43 compositor_.SetAcceleratedWidget(
44 accelerated_widget_mac_->accelerated_widget());
45 compositor_.SetLocksWillTimeOut(false);
46 Suspend();
47 compositor_.AddObserver(this);
48 }
49
50 BrowserCompositorMac::~BrowserCompositorMac() {
51 compositor_.RemoveObserver(this);
52 }
53
54 void BrowserCompositorMac::Suspend() {
55 compositor_suspended_lock_ = compositor_.GetCompositorLock();
56 }
57
58 void BrowserCompositorMac::Unsuspend() {
59 compositor_suspended_lock_ = nullptr;
60 }
61
62 void BrowserCompositorMac::OnCompositingDidCommit(
63 ui::Compositor* compositor_that_did_commit) {
64 DCHECK_EQ(compositor_that_did_commit, compositor());
65 content::ImageTransportFactory::GetInstance()
66 ->SetCompositorSuspendedForRecycle(compositor(), false);
67 }
68
69 // static
70 scoped_ptr<BrowserCompositorMac> BrowserCompositorMac::Create() {
71 DCHECK(ui::WindowResizeHelperMac::Get()->task_runner());
72 if (g_recyclable_browser_compositor.Get())
73 return std::move(g_recyclable_browser_compositor.Get());
74 return scoped_ptr<BrowserCompositorMac>(new BrowserCompositorMac);
75 }
76
77 // static
78 void BrowserCompositorMac::Recycle(
79 scoped_ptr<BrowserCompositorMac> compositor) {
80 DCHECK(compositor);
81 content::ImageTransportFactory::GetInstance()
82 ->SetCompositorSuspendedForRecycle(compositor->compositor(), true);
83
84 // It is an error to have a browser compositor continue to exist after
85 // shutdown.
86 CHECK(!g_has_shut_down);
87
88 // Make this BrowserCompositorMac recyclable for future instances.
89 g_recyclable_browser_compositor.Get().swap(compositor);
90
91 // If there are no placeholders allocated, destroy the recyclable
92 // BrowserCompositorMac that we just populated.
93 if (!g_placeholder_count)
94 g_recyclable_browser_compositor.Get().reset();
95 }
96
97 // static
98 void BrowserCompositorMac::DisableRecyclingForShutdown() {
99 g_has_shut_down = true;
100 g_recyclable_browser_compositor.Get().reset();
101 }
102
103 ////////////////////////////////////////////////////////////////////////////////
104 // BrowserCompositorMacPlaceholder
105
106 BrowserCompositorMacPlaceholder::BrowserCompositorMacPlaceholder() {
107 g_placeholder_count += 1;
108 }
109
110 BrowserCompositorMacPlaceholder::~BrowserCompositorMacPlaceholder() {
111 DCHECK_GT(g_placeholder_count, 0u);
112 g_placeholder_count -= 1;
113
114 // If there are no placeholders allocated, destroy the recyclable
115 // BrowserCompositorMac.
116 if (!g_placeholder_count)
117 g_recyclable_browser_compositor.Get().reset();
118 }
119
120 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/compositor/browser_compositor_view_mac.h ('k') | content/browser/compositor/delegated_frame_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698