| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/thread_proxy.h" | 5 #include "cc/thread_proxy.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "cc/delay_based_time_source.h" | 9 #include "cc/delay_based_time_source.h" |
| 10 #include "cc/draw_quad.h" | 10 #include "cc/draw_quad.h" |
| 11 #include "cc/frame_rate_controller.h" | 11 #include "cc/frame_rate_controller.h" |
| 12 #include "cc/graphics_context.h" | |
| 13 #include "cc/input_handler.h" | 12 #include "cc/input_handler.h" |
| 14 #include "cc/layer_tree_host.h" | 13 #include "cc/layer_tree_host.h" |
| 14 #include "cc/output_surface.h" |
| 15 #include "cc/scheduler.h" | 15 #include "cc/scheduler.h" |
| 16 #include "cc/scoped_thread_proxy.h" | 16 #include "cc/scoped_thread_proxy.h" |
| 17 #include "cc/thread.h" | 17 #include "cc/thread.h" |
| 18 #include <public/WebSharedGraphicsContext3D.h> | 18 #include <public/WebSharedGraphicsContext3D.h> |
| 19 | 19 |
| 20 using WebKit::WebSharedGraphicsContext3D; | 20 using WebKit::WebSharedGraphicsContext3D; |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 // Measured in seconds. | 24 // Measured in seconds. |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::finishAllRenderingOnI
mplThread, base::Unretained(this), &completion)); | 140 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::finishAllRenderingOnI
mplThread, base::Unretained(this), &completion)); |
| 141 completion.wait(); | 141 completion.wait(); |
| 142 } | 142 } |
| 143 | 143 |
| 144 bool ThreadProxy::isStarted() const | 144 bool ThreadProxy::isStarted() const |
| 145 { | 145 { |
| 146 DCHECK(Proxy::isMainThread()); | 146 DCHECK(Proxy::isMainThread()); |
| 147 return m_started; | 147 return m_started; |
| 148 } | 148 } |
| 149 | 149 |
| 150 bool ThreadProxy::initializeContext() | 150 bool ThreadProxy::initializeOutputSurface() |
| 151 { | 151 { |
| 152 TRACE_EVENT0("cc", "ThreadProxy::initializeContext"); | 152 TRACE_EVENT0("cc", "ThreadProxy::initializeOutputSurface"); |
| 153 scoped_ptr<GraphicsContext> context = m_layerTreeHost->createContext(); | 153 scoped_ptr<OutputSurface> context = m_layerTreeHost->createOutputSurface(); |
| 154 if (!context.get()) | 154 if (!context.get()) |
| 155 return false; | 155 return false; |
| 156 | 156 |
| 157 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::initializeContextOnIm
plThread, base::Unretained(this), base::Passed(context.Pass()))); | 157 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::initializeOutputSurfa
ceOnImplThread, base::Unretained(this), base::Passed(context.Pass()))); |
| 158 return true; | 158 return true; |
| 159 } | 159 } |
| 160 | 160 |
| 161 void ThreadProxy::setSurfaceReady() | 161 void ThreadProxy::setSurfaceReady() |
| 162 { | 162 { |
| 163 TRACE_EVENT0("cc", "ThreadProxy::setSurfaceReady"); | 163 TRACE_EVENT0("cc", "ThreadProxy::setSurfaceReady"); |
| 164 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setSurfaceReadyOnImpl
Thread, base::Unretained(this))); | 164 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setSurfaceReadyOnImpl
Thread, base::Unretained(this))); |
| 165 } | 165 } |
| 166 | 166 |
| 167 void ThreadProxy::setSurfaceReadyOnImplThread() | 167 void ThreadProxy::setSurfaceReadyOnImplThread() |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 &capabilities)); | 203 &capabilities)); |
| 204 completion.wait(); | 204 completion.wait(); |
| 205 | 205 |
| 206 if (initializeSucceeded) { | 206 if (initializeSucceeded) { |
| 207 m_rendererInitialized = true; | 207 m_rendererInitialized = true; |
| 208 m_RendererCapabilitiesMainThreadCopy = capabilities; | 208 m_RendererCapabilitiesMainThreadCopy = capabilities; |
| 209 } | 209 } |
| 210 return initializeSucceeded; | 210 return initializeSucceeded; |
| 211 } | 211 } |
| 212 | 212 |
| 213 bool ThreadProxy::recreateContext() | 213 bool ThreadProxy::recreateOutputSurface() |
| 214 { | 214 { |
| 215 TRACE_EVENT0("cc", "ThreadProxy::recreateContext"); | 215 TRACE_EVENT0("cc", "ThreadProxy::recreateOutputSurface"); |
| 216 DCHECK(isMainThread()); | 216 DCHECK(isMainThread()); |
| 217 | 217 |
| 218 // Try to create the context. | 218 // Try to create the surface. |
| 219 scoped_ptr<GraphicsContext> context = m_layerTreeHost->createContext(); | 219 scoped_ptr<OutputSurface> outputSurface = m_layerTreeHost->createOutputSurfa
ce(); |
| 220 if (!context.get()) | 220 if (!outputSurface.get()) |
| 221 return false; | 221 return false; |
| 222 if (m_layerTreeHost->needsSharedContext()) | 222 if (m_layerTreeHost->needsSharedContext()) |
| 223 if (!WebSharedGraphicsContext3D::createCompositorThreadContext()) | 223 if (!WebSharedGraphicsContext3D::createCompositorThreadContext()) |
| 224 return false; | 224 return false; |
| 225 | 225 |
| 226 // Make a blocking call to recreateContextOnImplThread. The results of that | 226 // Make a blocking call to recreateOutputSurfaceOnImplThread. The results of
that |
| 227 // call are pushed into the recreateSucceeded and capabilities local | 227 // call are pushed into the recreateSucceeded and capabilities local |
| 228 // variables. | 228 // variables. |
| 229 CompletionEvent completion; | 229 CompletionEvent completion; |
| 230 bool recreateSucceeded = false; | 230 bool recreateSucceeded = false; |
| 231 RendererCapabilities capabilities; | 231 RendererCapabilities capabilities; |
| 232 DebugScopedSetMainThreadBlocked mainThreadBlocked(this); | 232 DebugScopedSetMainThreadBlocked mainThreadBlocked(this); |
| 233 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::recreateContextOnImpl
Thread, | 233 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::recreateOutputSurface
OnImplThread, |
| 234 base::Unretained(this), | 234 base::Unretained(this), |
| 235 &completion, | 235 &completion, |
| 236 base::Passed(context.Pass()), | 236 base::Passed(outputSurface.Pass()), |
| 237 &recreateSucceeded, | 237 &recreateSucceeded, |
| 238 &capabilities)); | 238 &capabilities)); |
| 239 completion.wait(); | 239 completion.wait(); |
| 240 | 240 |
| 241 if (recreateSucceeded) | 241 if (recreateSucceeded) |
| 242 m_RendererCapabilitiesMainThreadCopy = capabilities; | 242 m_RendererCapabilitiesMainThreadCopy = capabilities; |
| 243 return recreateSucceeded; | 243 return recreateSucceeded; |
| 244 } | 244 } |
| 245 | 245 |
| 246 void ThreadProxy::renderingStats(RenderingStats* stats) | 246 void ThreadProxy::renderingStats(RenderingStats* stats) |
| 247 { | 247 { |
| 248 DCHECK(isMainThread()); | 248 DCHECK(isMainThread()); |
| 249 | 249 |
| 250 DebugScopedSetMainThreadBlocked mainThreadBlocked(this); | 250 DebugScopedSetMainThreadBlocked mainThreadBlocked(this); |
| 251 CompletionEvent completion; | 251 CompletionEvent completion; |
| 252 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::renderingStatsOnImplT
hread, | 252 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::renderingStatsOnImplT
hread, |
| 253 base::Unretained(this), &completio
n, stats)); | 253 base::Unretained(this), &completio
n, stats)); |
| 254 stats->totalCommitTimeInSeconds = m_totalCommitTime.InSecondsF(); | 254 stats->totalCommitTimeInSeconds = m_totalCommitTime.InSecondsF(); |
| 255 stats->totalCommitCount = m_totalCommitCount; | 255 stats->totalCommitCount = m_totalCommitCount; |
| 256 | 256 |
| 257 completion.wait(); | 257 completion.wait(); |
| 258 } | 258 } |
| 259 | 259 |
| 260 const RendererCapabilities& ThreadProxy::rendererCapabilities() const | 260 const RendererCapabilities& ThreadProxy::rendererCapabilities() const |
| 261 { | 261 { |
| 262 DCHECK(m_rendererInitialized); | 262 DCHECK(m_rendererInitialized); |
| 263 return m_RendererCapabilitiesMainThreadCopy; | 263 return m_RendererCapabilitiesMainThreadCopy; |
| 264 } | 264 } |
| 265 | 265 |
| 266 void ThreadProxy::loseContext() | 266 void ThreadProxy::loseOutputSurface() |
| 267 { | 267 { |
| 268 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::didLoseContextOnImplT
hread, base::Unretained(this))); | 268 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::didLoseOutputSurfaceO
nImplThread, base::Unretained(this))); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void ThreadProxy::setNeedsAnimate() | 271 void ThreadProxy::setNeedsAnimate() |
| 272 { | 272 { |
| 273 DCHECK(isMainThread()); | 273 DCHECK(isMainThread()); |
| 274 if (m_animateRequested) | 274 if (m_animateRequested) |
| 275 return; | 275 return; |
| 276 | 276 |
| 277 TRACE_EVENT0("cc", "ThreadProxy::setNeedsAnimate"); | 277 TRACE_EVENT0("cc", "ThreadProxy::setNeedsAnimate"); |
| 278 m_animateRequested = true; | 278 m_animateRequested = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 290 return; | 290 return; |
| 291 TRACE_EVENT0("cc", "ThreadProxy::setNeedsCommit"); | 291 TRACE_EVENT0("cc", "ThreadProxy::setNeedsCommit"); |
| 292 m_commitRequested = true; | 292 m_commitRequested = true; |
| 293 | 293 |
| 294 if (m_commitRequestSentToImplThread) | 294 if (m_commitRequestSentToImplThread) |
| 295 return; | 295 return; |
| 296 m_commitRequestSentToImplThread = true; | 296 m_commitRequestSentToImplThread = true; |
| 297 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsCommitOnImplT
hread, base::Unretained(this))); | 297 Proxy::implThread()->postTask(base::Bind(&ThreadProxy::setNeedsCommitOnImplT
hread, base::Unretained(this))); |
| 298 } | 298 } |
| 299 | 299 |
| 300 void ThreadProxy::didLoseContextOnImplThread() | 300 void ThreadProxy::didLoseOutputSurfaceOnImplThread() |
| 301 { | 301 { |
| 302 DCHECK(isImplThread()); | 302 DCHECK(isImplThread()); |
| 303 TRACE_EVENT0("cc", "ThreadProxy::didLoseContextOnImplThread"); | 303 TRACE_EVENT0("cc", "ThreadProxy::didLoseOutputSurfaceOnImplThread"); |
| 304 m_schedulerOnImplThread->didLoseContext(); | 304 m_schedulerOnImplThread->didLoseOutputSurface(); |
| 305 } | 305 } |
| 306 | 306 |
| 307 void ThreadProxy::onSwapBuffersCompleteOnImplThread() | 307 void ThreadProxy::onSwapBuffersCompleteOnImplThread() |
| 308 { | 308 { |
| 309 DCHECK(isImplThread()); | 309 DCHECK(isImplThread()); |
| 310 TRACE_EVENT0("cc", "ThreadProxy::onSwapBuffersCompleteOnImplThread"); | 310 TRACE_EVENT0("cc", "ThreadProxy::onSwapBuffersCompleteOnImplThread"); |
| 311 m_schedulerOnImplThread->didSwapBuffersComplete(); | 311 m_schedulerOnImplThread->didSwapBuffersComplete(); |
| 312 m_mainThreadProxy->postTask(FROM_HERE, base::Bind(&ThreadProxy::didCompleteS
wapBuffers, base::Unretained(this))); | 312 m_mainThreadProxy->postTask(FROM_HERE, base::Bind(&ThreadProxy::didCompleteS
wapBuffers, base::Unretained(this))); |
| 313 } | 313 } |
| 314 | 314 |
| (...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 DCHECK(isMainThread()); | 862 DCHECK(isMainThread()); |
| 863 if (!m_layerTreeHost) | 863 if (!m_layerTreeHost) |
| 864 return; | 864 return; |
| 865 m_layerTreeHost->setAnimationEvents(events.Pass(), wallClockTime); | 865 m_layerTreeHost->setAnimationEvents(events.Pass(), wallClockTime); |
| 866 } | 866 } |
| 867 | 867 |
| 868 void ThreadProxy::beginContextRecreation() | 868 void ThreadProxy::beginContextRecreation() |
| 869 { | 869 { |
| 870 TRACE_EVENT0("cc", "ThreadProxy::beginContextRecreation"); | 870 TRACE_EVENT0("cc", "ThreadProxy::beginContextRecreation"); |
| 871 DCHECK(isMainThread()); | 871 DCHECK(isMainThread()); |
| 872 m_layerTreeHost->didLoseContext(); | 872 m_layerTreeHost->didLoseOutputSurface(); |
| 873 m_contextRecreationCallback.Reset(base::Bind(&ThreadProxy::tryToRecreateCont
ext, base::Unretained(this))); | 873 m_outputSurfaceRecreationCallback.Reset(base::Bind(&ThreadProxy::tryToRecrea
teOutputSurface, base::Unretained(this))); |
| 874 Proxy::mainThread()->postTask(m_contextRecreationCallback.callback()); | 874 Proxy::mainThread()->postTask(m_outputSurfaceRecreationCallback.callback()); |
| 875 } | 875 } |
| 876 | 876 |
| 877 void ThreadProxy::tryToRecreateContext() | 877 void ThreadProxy::tryToRecreateOutputSurface() |
| 878 { | 878 { |
| 879 DCHECK(isMainThread()); | 879 DCHECK(isMainThread()); |
| 880 DCHECK(m_layerTreeHost); | 880 DCHECK(m_layerTreeHost); |
| 881 LayerTreeHost::RecreateResult result = m_layerTreeHost->recreateContext(); | 881 LayerTreeHost::RecreateResult result = m_layerTreeHost->recreateOutputSurfac
e(); |
| 882 if (result == LayerTreeHost::RecreateFailedButTryAgain) | 882 if (result == LayerTreeHost::RecreateFailedButTryAgain) |
| 883 Proxy::mainThread()->postTask(m_contextRecreationCallback.callback()); | 883 Proxy::mainThread()->postTask(m_outputSurfaceRecreationCallback.callback
()); |
| 884 else if (result == LayerTreeHost::RecreateSucceeded) | 884 else if (result == LayerTreeHost::RecreateSucceeded) |
| 885 m_contextRecreationCallback.Cancel(); | 885 m_outputSurfaceRecreationCallback.Cancel(); |
| 886 } | 886 } |
| 887 | 887 |
| 888 void ThreadProxy::initializeImplOnImplThread(CompletionEvent* completion, InputH
andler* handler) | 888 void ThreadProxy::initializeImplOnImplThread(CompletionEvent* completion, InputH
andler* handler) |
| 889 { | 889 { |
| 890 TRACE_EVENT0("cc", "ThreadProxy::initializeImplOnImplThread"); | 890 TRACE_EVENT0("cc", "ThreadProxy::initializeImplOnImplThread"); |
| 891 DCHECK(isImplThread()); | 891 DCHECK(isImplThread()); |
| 892 m_layerTreeHostImpl = m_layerTreeHost->createLayerTreeHostImpl(this); | 892 m_layerTreeHostImpl = m_layerTreeHost->createLayerTreeHostImpl(this); |
| 893 const base::TimeDelta displayRefreshInterval = base::TimeDelta::FromMicrosec
onds(base::Time::kMicrosecondsPerSecond / 60); | 893 const base::TimeDelta displayRefreshInterval = base::TimeDelta::FromMicrosec
onds(base::Time::kMicrosecondsPerSecond / 60); |
| 894 scoped_ptr<FrameRateController> frameRateController; | 894 scoped_ptr<FrameRateController> frameRateController; |
| 895 if (m_renderVSyncEnabled) | 895 if (m_renderVSyncEnabled) |
| 896 frameRateController.reset(new FrameRateController(DelayBasedTimeSource::
create(displayRefreshInterval, Proxy::implThread()))); | 896 frameRateController.reset(new FrameRateController(DelayBasedTimeSource::
create(displayRefreshInterval, Proxy::implThread()))); |
| 897 else | 897 else |
| 898 frameRateController.reset(new FrameRateController(Proxy::implThread())); | 898 frameRateController.reset(new FrameRateController(Proxy::implThread())); |
| 899 m_schedulerOnImplThread = Scheduler::create(this, frameRateController.Pass()
); | 899 m_schedulerOnImplThread = Scheduler::create(this, frameRateController.Pass()
); |
| 900 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); | 900 m_schedulerOnImplThread->setVisible(m_layerTreeHostImpl->visible()); |
| 901 | 901 |
| 902 m_inputHandlerOnImplThread = scoped_ptr<InputHandler>(handler); | 902 m_inputHandlerOnImplThread = scoped_ptr<InputHandler>(handler); |
| 903 if (m_inputHandlerOnImplThread.get()) | 903 if (m_inputHandlerOnImplThread.get()) |
| 904 m_inputHandlerOnImplThread->bindToClient(m_layerTreeHostImpl.get()); | 904 m_inputHandlerOnImplThread->bindToClient(m_layerTreeHostImpl.get()); |
| 905 | 905 |
| 906 completion->signal(); | 906 completion->signal(); |
| 907 } | 907 } |
| 908 | 908 |
| 909 void ThreadProxy::initializeContextOnImplThread(scoped_ptr<GraphicsContext> cont
ext) | 909 void ThreadProxy::initializeOutputSurfaceOnImplThread(scoped_ptr<OutputSurface>
outputSurface) |
| 910 { | 910 { |
| 911 TRACE_EVENT0("cc", "ThreadProxy::initializeContextOnImplThread"); | 911 TRACE_EVENT0("cc", "ThreadProxy::initializeContextOnImplThread"); |
| 912 DCHECK(isImplThread()); | 912 DCHECK(isImplThread()); |
| 913 m_contextBeforeInitializationOnImplThread = context.Pass(); | 913 m_outputSurfaceBeforeInitializationOnImplThread = outputSurface.Pass(); |
| 914 } | 914 } |
| 915 | 915 |
| 916 void ThreadProxy::initializeRendererOnImplThread(CompletionEvent* completion, bo
ol* initializeSucceeded, RendererCapabilities* capabilities) | 916 void ThreadProxy::initializeRendererOnImplThread(CompletionEvent* completion, bo
ol* initializeSucceeded, RendererCapabilities* capabilities) |
| 917 { | 917 { |
| 918 TRACE_EVENT0("cc", "ThreadProxy::initializeRendererOnImplThread"); | 918 TRACE_EVENT0("cc", "ThreadProxy::initializeRendererOnImplThread"); |
| 919 DCHECK(isImplThread()); | 919 DCHECK(isImplThread()); |
| 920 DCHECK(m_contextBeforeInitializationOnImplThread.get()); | 920 DCHECK(m_outputSurfaceBeforeInitializationOnImplThread.get()); |
| 921 *initializeSucceeded = m_layerTreeHostImpl->initializeRenderer(m_contextBefo
reInitializationOnImplThread.Pass()); | 921 *initializeSucceeded = m_layerTreeHostImpl->initializeRenderer(m_outputSurfa
ceBeforeInitializationOnImplThread.Pass()); |
| 922 if (*initializeSucceeded) { | 922 if (*initializeSucceeded) { |
| 923 *capabilities = m_layerTreeHostImpl->rendererCapabilities(); | 923 *capabilities = m_layerTreeHostImpl->rendererCapabilities(); |
| 924 m_schedulerOnImplThread->setSwapBuffersCompleteSupported( | 924 m_schedulerOnImplThread->setSwapBuffersCompleteSupported( |
| 925 capabilities->usingSwapCompleteCallback); | 925 capabilities->usingSwapCompleteCallback); |
| 926 } | 926 } |
| 927 | 927 |
| 928 completion->signal(); | 928 completion->signal(); |
| 929 } | 929 } |
| 930 | 930 |
| 931 void ThreadProxy::layerTreeHostClosedOnImplThread(CompletionEvent* completion) | 931 void ThreadProxy::layerTreeHostClosedOnImplThread(CompletionEvent* completion) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 943 { | 943 { |
| 944 DCHECK(isImplThread()); | 944 DCHECK(isImplThread()); |
| 945 m_layerTreeHostImpl->setFullRootLayerDamage(); | 945 m_layerTreeHostImpl->setFullRootLayerDamage(); |
| 946 } | 946 } |
| 947 | 947 |
| 948 size_t ThreadProxy::maxPartialTextureUpdates() const | 948 size_t ThreadProxy::maxPartialTextureUpdates() const |
| 949 { | 949 { |
| 950 return ResourceUpdateController::maxPartialTextureUpdates(); | 950 return ResourceUpdateController::maxPartialTextureUpdates(); |
| 951 } | 951 } |
| 952 | 952 |
| 953 void ThreadProxy::recreateContextOnImplThread(CompletionEvent* completion, scope
d_ptr<GraphicsContext> context, bool* recreateSucceeded, RendererCapabilities* c
apabilities) | 953 void ThreadProxy::recreateOutputSurfaceOnImplThread(CompletionEvent* completion,
scoped_ptr<OutputSurface> outputSurface, bool* recreateSucceeded, RendererCapab
ilities* capabilities) |
| 954 { | 954 { |
| 955 TRACE_EVENT0("cc", "ThreadProxy::recreateContextOnImplThread"); | 955 TRACE_EVENT0("cc", "ThreadProxy::recreateOutputSurfaceOnImplThread"); |
| 956 DCHECK(isImplThread()); | 956 DCHECK(isImplThread()); |
| 957 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->res
ourceProvider()); | 957 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->res
ourceProvider()); |
| 958 *recreateSucceeded = m_layerTreeHostImpl->initializeRenderer(context.Pass())
; | 958 *recreateSucceeded = m_layerTreeHostImpl->initializeRenderer(outputSurface.P
ass()); |
| 959 if (*recreateSucceeded) { | 959 if (*recreateSucceeded) { |
| 960 *capabilities = m_layerTreeHostImpl->rendererCapabilities(); | 960 *capabilities = m_layerTreeHostImpl->rendererCapabilities(); |
| 961 m_schedulerOnImplThread->didRecreateContext(); | 961 m_schedulerOnImplThread->didRecreateOutputSurface(); |
| 962 } | 962 } |
| 963 completion->signal(); | 963 completion->signal(); |
| 964 } | 964 } |
| 965 | 965 |
| 966 void ThreadProxy::renderingStatsOnImplThread(CompletionEvent* completion, Render
ingStats* stats) | 966 void ThreadProxy::renderingStatsOnImplThread(CompletionEvent* completion, Render
ingStats* stats) |
| 967 { | 967 { |
| 968 DCHECK(isImplThread()); | 968 DCHECK(isImplThread()); |
| 969 m_layerTreeHostImpl->renderingStats(stats); | 969 m_layerTreeHostImpl->renderingStats(stats); |
| 970 completion->signal(); | 970 completion->signal(); |
| 971 } | 971 } |
| 972 | 972 |
| 973 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState() | 973 ThreadProxy::BeginFrameAndCommitState::BeginFrameAndCommitState() |
| 974 : memoryAllocationLimitBytes(0) | 974 : memoryAllocationLimitBytes(0) |
| 975 { | 975 { |
| 976 } | 976 } |
| 977 | 977 |
| 978 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState() | 978 ThreadProxy::BeginFrameAndCommitState::~BeginFrameAndCommitState() |
| 979 { | 979 { |
| 980 } | 980 } |
| 981 | 981 |
| 982 } // namespace cc | 982 } // namespace cc |
| OLD | NEW |