| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/output/output_surface.h" | 5 #include "cc/output/output_surface.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/trace_event/trace_event.h" | 9 #include "base/trace_event/trace_event.h" |
| 10 #include "cc/output/managed_memory_policy.h" | |
| 11 #include "cc/output/output_surface_client.h" | 10 #include "cc/output/output_surface_client.h" |
| 12 #include "gpu/GLES2/gl2extchromium.h" | 11 #include "gpu/GLES2/gl2extchromium.h" |
| 13 #include "gpu/command_buffer/client/gles2_interface.h" | 12 #include "gpu/command_buffer/client/gles2_interface.h" |
| 14 #include "ui/gfx/geometry/rect.h" | 13 #include "ui/gfx/geometry/rect.h" |
| 15 #include "ui/gfx/geometry/size.h" | 14 #include "ui/gfx/geometry/size.h" |
| 16 | 15 |
| 17 | 16 |
| 18 namespace cc { | 17 namespace cc { |
| 19 | 18 |
| 20 OutputSurface::OutputSurface( | 19 OutputSurface::OutputSurface( |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 DCHECK(!context_provider_.get()); | 171 DCHECK(!context_provider_.get()); |
| 173 } | 172 } |
| 174 | 173 |
| 175 void OutputSurface::SetUpContext3d() { | 174 void OutputSurface::SetUpContext3d() { |
| 176 DCHECK(context_provider_.get()); | 175 DCHECK(context_provider_.get()); |
| 177 DCHECK(client_); | 176 DCHECK(client_); |
| 178 | 177 |
| 179 context_provider_->SetLostContextCallback( | 178 context_provider_->SetLostContextCallback( |
| 180 base::Bind(&OutputSurface::DidLoseOutputSurface, | 179 base::Bind(&OutputSurface::DidLoseOutputSurface, |
| 181 base::Unretained(this))); | 180 base::Unretained(this))); |
| 182 context_provider_->SetMemoryPolicyChangedCallback( | |
| 183 base::Bind(&OutputSurface::SetMemoryPolicy, | |
| 184 base::Unretained(this))); | |
| 185 } | 181 } |
| 186 | 182 |
| 187 void OutputSurface::ReleaseContextProvider() { | 183 void OutputSurface::ReleaseContextProvider() { |
| 188 DCHECK(client_); | 184 DCHECK(client_); |
| 189 DCHECK(context_provider_.get()); | 185 DCHECK(context_provider_.get()); |
| 190 ResetContext3d(); | 186 ResetContext3d(); |
| 191 } | 187 } |
| 192 | 188 |
| 193 void OutputSurface::ResetContext3d() { | 189 void OutputSurface::ResetContext3d() { |
| 194 if (context_provider_.get()) { | 190 if (context_provider_.get()) { |
| 195 context_provider_->SetLostContextCallback( | 191 context_provider_->SetLostContextCallback( |
| 196 ContextProvider::LostContextCallback()); | 192 ContextProvider::LostContextCallback()); |
| 197 context_provider_->SetMemoryPolicyChangedCallback( | |
| 198 ContextProvider::MemoryPolicyChangedCallback()); | |
| 199 } | 193 } |
| 200 if (worker_context_provider_.get()) { | 194 if (worker_context_provider_.get()) { |
| 201 worker_context_provider_->SetLostContextCallback( | 195 worker_context_provider_->SetLostContextCallback( |
| 202 ContextProvider::LostContextCallback()); | 196 ContextProvider::LostContextCallback()); |
| 203 } | 197 } |
| 204 context_provider_ = NULL; | 198 context_provider_ = NULL; |
| 205 worker_context_provider_ = NULL; | 199 worker_context_provider_ = NULL; |
| 206 } | 200 } |
| 207 | 201 |
| 208 void OutputSurface::EnsureBackbuffer() { | 202 void OutputSurface::EnsureBackbuffer() { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 base::Bind(&OutputSurface::OnSwapBuffersComplete, | 240 base::Bind(&OutputSurface::OnSwapBuffersComplete, |
| 247 weak_ptr_factory_.GetWeakPtr())); | 241 weak_ptr_factory_.GetWeakPtr())); |
| 248 } | 242 } |
| 249 | 243 |
| 250 // We don't post tasks bound to the client directly since they might run | 244 // We don't post tasks bound to the client directly since they might run |
| 251 // after the OutputSurface has been destroyed. | 245 // after the OutputSurface has been destroyed. |
| 252 void OutputSurface::OnSwapBuffersComplete() { | 246 void OutputSurface::OnSwapBuffersComplete() { |
| 253 client_->DidSwapBuffersComplete(); | 247 client_->DidSwapBuffersComplete(); |
| 254 } | 248 } |
| 255 | 249 |
| 256 void OutputSurface::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | |
| 257 TRACE_EVENT1("cc", "OutputSurface::SetMemoryPolicy", | |
| 258 "bytes_limit_when_visible", policy.bytes_limit_when_visible); | |
| 259 // Just ignore the memory manager when it says to set the limit to zero | |
| 260 // bytes. This will happen when the memory manager thinks that the renderer | |
| 261 // is not visible (which the renderer knows better). | |
| 262 if (policy.bytes_limit_when_visible) | |
| 263 client_->SetMemoryPolicy(policy); | |
| 264 } | |
| 265 | |
| 266 } // namespace cc | 250 } // namespace cc |
| OLD | NEW |