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 <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 } | 112 } |
113 | 113 |
114 base::trace_event::ProcessMemoryDump* pmd_; | 114 base::trace_event::ProcessMemoryDump* pmd_; |
115 uint64_t share_group_tracing_guid_; | 115 uint64_t share_group_tracing_guid_; |
116 | 116 |
117 DISALLOW_COPY_AND_ASSIGN(SkiaGpuTraceMemoryDump); | 117 DISALLOW_COPY_AND_ASSIGN(SkiaGpuTraceMemoryDump); |
118 }; | 118 }; |
119 | 119 |
120 } // namespace | 120 } // namespace |
121 | 121 |
122 OutputSurface::OutputSurface( | 122 OutputSurface::OutputSurface(scoped_refptr<ContextProvider> context_provider) |
123 scoped_refptr<ContextProvider> context_provider, | 123 : context_provider_(std::move(context_provider)), weak_ptr_factory_(this) { |
124 scoped_refptr<ContextProvider> worker_context_provider, | 124 DCHECK(context_provider_); |
125 std::unique_ptr<SoftwareOutputDevice> software_device) | |
126 : context_provider_(std::move(context_provider)), | |
127 worker_context_provider_(std::move(worker_context_provider)), | |
128 software_device_(std::move(software_device)), | |
129 weak_ptr_factory_(this) { | |
130 client_thread_checker_.DetachFromThread(); | 125 client_thread_checker_.DetachFromThread(); |
131 } | 126 } |
132 | 127 |
| 128 OutputSurface::OutputSurface( |
| 129 std::unique_ptr<SoftwareOutputDevice> software_device) |
| 130 : software_device_(std::move(software_device)), weak_ptr_factory_(this) { |
| 131 DCHECK(software_device_); |
| 132 client_thread_checker_.DetachFromThread(); |
| 133 } |
| 134 |
133 OutputSurface::OutputSurface( | 135 OutputSurface::OutputSurface( |
134 scoped_refptr<VulkanContextProvider> vulkan_context_provider) | 136 scoped_refptr<VulkanContextProvider> vulkan_context_provider) |
135 : vulkan_context_provider_(vulkan_context_provider), | 137 : vulkan_context_provider_(vulkan_context_provider), |
136 weak_ptr_factory_(this) { | 138 weak_ptr_factory_(this) { |
| 139 DCHECK(vulkan_context_provider_); |
137 client_thread_checker_.DetachFromThread(); | 140 client_thread_checker_.DetachFromThread(); |
138 } | 141 } |
139 | 142 |
140 OutputSurface::~OutputSurface() { | 143 OutputSurface::~OutputSurface() { |
141 if (client_) | 144 if (client_) |
142 DetachFromClientInternal(); | 145 DetachFromClientInternal(); |
143 } | 146 } |
144 | 147 |
145 bool OutputSurface::HasExternalStencilTest() const { | 148 bool OutputSurface::HasExternalStencilTest() const { |
146 return false; | 149 return false; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 bool OutputSurface::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, | 259 bool OutputSurface::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args, |
257 base::trace_event::ProcessMemoryDump* pmd) { | 260 base::trace_event::ProcessMemoryDump* pmd) { |
258 if (auto* context_provider = this->context_provider()) { | 261 if (auto* context_provider = this->context_provider()) { |
259 // No need to lock, main context provider is not shared. | 262 // No need to lock, main context provider is not shared. |
260 if (auto* gr_context = context_provider->GrContext()) { | 263 if (auto* gr_context = context_provider->GrContext()) { |
261 SkiaGpuTraceMemoryDump trace_memory_dump( | 264 SkiaGpuTraceMemoryDump trace_memory_dump( |
262 pmd, context_provider->ContextSupport()->ShareGroupTracingGUID()); | 265 pmd, context_provider->ContextSupport()->ShareGroupTracingGUID()); |
263 gr_context->dumpMemoryStatistics(&trace_memory_dump); | 266 gr_context->dumpMemoryStatistics(&trace_memory_dump); |
264 } | 267 } |
265 } | 268 } |
266 if (auto* context_provider = worker_context_provider()) { | |
267 ContextProvider::ScopedContextLock scoped_context(context_provider); | |
268 | |
269 if (auto* gr_context = context_provider->GrContext()) { | |
270 SkiaGpuTraceMemoryDump trace_memory_dump( | |
271 pmd, context_provider->ContextSupport()->ShareGroupTracingGUID()); | |
272 gr_context->dumpMemoryStatistics(&trace_memory_dump); | |
273 } | |
274 } | |
275 | |
276 return true; | 269 return true; |
277 } | 270 } |
278 | 271 |
279 void OutputSurface::DetachFromClientInternal() { | 272 void OutputSurface::DetachFromClientInternal() { |
280 DCHECK(client_thread_checker_.CalledOnValidThread()); | 273 DCHECK(client_thread_checker_.CalledOnValidThread()); |
281 DCHECK(client_); | 274 DCHECK(client_); |
282 | 275 |
283 // Unregister any dump provider. Safe to call (no-op) if we have not yet | 276 // Unregister any dump provider. Safe to call (no-op) if we have not yet |
284 // registered. | 277 // registered. |
285 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( | 278 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
286 this); | 279 this); |
287 | 280 |
288 if (context_provider_.get()) { | 281 if (context_provider_.get()) { |
289 context_provider_->SetLostContextCallback( | 282 context_provider_->SetLostContextCallback( |
290 ContextProvider::LostContextCallback()); | 283 ContextProvider::LostContextCallback()); |
291 } | 284 } |
292 context_provider_ = nullptr; | 285 context_provider_ = nullptr; |
293 client_ = nullptr; | 286 client_ = nullptr; |
294 weak_ptr_factory_.InvalidateWeakPtrs(); | 287 weak_ptr_factory_.InvalidateWeakPtrs(); |
295 } | 288 } |
296 | 289 |
297 void OutputSurface::DidLoseOutputSurface() { | 290 void OutputSurface::DidLoseOutputSurface() { |
298 TRACE_EVENT0("cc", "OutputSurface::DidLoseOutputSurface"); | 291 TRACE_EVENT0("cc", "OutputSurface::DidLoseOutputSurface"); |
299 client_->DidLoseOutputSurface(); | 292 client_->DidLoseOutputSurface(); |
300 } | 293 } |
301 | 294 |
302 } // namespace cc | 295 } // namespace cc |
OLD | NEW |