| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "content/browser/gpu/browser_gpu_memory_buffer_manager.h" | 5 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 ~CreateGpuMemoryBufferRequest() {} | 58 ~CreateGpuMemoryBufferRequest() {} |
| 59 base::WaitableEvent event; | 59 base::WaitableEvent event; |
| 60 gfx::Size size; | 60 gfx::Size size; |
| 61 gfx::BufferFormat format; | 61 gfx::BufferFormat format; |
| 62 gfx::BufferUsage usage; | 62 gfx::BufferUsage usage; |
| 63 int client_id; | 63 int client_id; |
| 64 gpu::SurfaceHandle surface_handle; | 64 gpu::SurfaceHandle surface_handle; |
| 65 std::unique_ptr<gfx::GpuMemoryBuffer> result; | 65 std::unique_ptr<gfx::GpuMemoryBuffer> result; |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 struct BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsRequest { |
| 69 GetGpuMemoryBufferAttribsRequest(int client_id) |
| 70 : event(base::WaitableEvent::ResetPolicy::MANUAL, |
| 71 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 72 client_id(client_id){}; |
| 73 ~GetGpuMemoryBufferAttribsRequest(){}; |
| 74 base::WaitableEvent event; |
| 75 int client_id; |
| 76 gfx::GpuMemoryBufferAttribVector result; |
| 77 }; |
| 78 |
| 68 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( | 79 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( |
| 69 int gpu_client_id, | 80 int gpu_client_id, |
| 70 uint64_t gpu_client_tracing_id) | 81 uint64_t gpu_client_tracing_id) |
| 71 : native_configurations_(gpu::GetNativeGpuMemoryBufferConfigurations()), | 82 : native_configurations_(gpu::GetNativeGpuMemoryBufferConfigurations()), |
| 72 gpu_client_id_(gpu_client_id), | 83 gpu_client_id_(gpu_client_id), |
| 73 gpu_client_tracing_id_(gpu_client_tracing_id) { | 84 gpu_client_tracing_id_(gpu_client_tracing_id) { |
| 74 DCHECK(!g_gpu_memory_buffer_manager); | 85 DCHECK(!g_gpu_memory_buffer_manager); |
| 75 g_gpu_memory_buffer_manager = this; | 86 g_gpu_memory_buffer_manager = this; |
| 76 } | 87 } |
| 77 | 88 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 id, size, format)); | 144 id, size, format)); |
| 134 } | 145 } |
| 135 | 146 |
| 136 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken( | 147 void BrowserGpuMemoryBufferManager::SetDestructionSyncToken( |
| 137 gfx::GpuMemoryBuffer* buffer, | 148 gfx::GpuMemoryBuffer* buffer, |
| 138 const gpu::SyncToken& sync_token) { | 149 const gpu::SyncToken& sync_token) { |
| 139 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( | 150 static_cast<gpu::GpuMemoryBufferImpl*>(buffer)->set_destruction_sync_token( |
| 140 sync_token); | 151 sync_token); |
| 141 } | 152 } |
| 142 | 153 |
| 154 void BrowserGpuMemoryBufferManager::HandleGpuMemoryBufferAttribsReceivedOnIO( |
| 155 GetGpuMemoryBufferAttribsRequest* request, |
| 156 const gfx::GpuMemoryBufferAttribVector& supported_attribs) { |
| 157 request->result = supported_attribs; |
| 158 request->event.Signal(); |
| 159 } |
| 160 |
| 161 void HostGetGpuMemoryBufferAttribs( |
| 162 GpuProcessHost* host, |
| 163 int client_id, |
| 164 const BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsCallback& |
| 165 callback) { |
| 166 host->GetGpuMemoryBufferAttribs(callback); |
| 167 } |
| 168 |
| 169 void BrowserGpuMemoryBufferManager::HandleGetGpuMemoryBufferAttribsOnIO( |
| 170 GetGpuMemoryBufferAttribsRequest* request) { |
| 171 GetGpuMemoryBufferAttribsOnIO( |
| 172 base::Bind(&HostGetGpuMemoryBufferAttribs), request->client_id, |
| 173 base::Bind(&BrowserGpuMemoryBufferManager:: |
| 174 HandleGpuMemoryBufferAttribsReceivedOnIO, |
| 175 base::Unretained(this), base::Unretained(request))); |
| 176 } |
| 177 |
| 178 void BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsOnIO( |
| 179 const GetGpuMemoryBufferAttribsDelegate& delegate, |
| 180 int client_id, |
| 181 const BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribsCallback& |
| 182 callback) { |
| 183 GpuProcessHost* host = GpuProcessHost::Get(); |
| 184 if (!host) { |
| 185 callback.Run(gfx::GpuMemoryBufferAttribVector()); |
| 186 } |
| 187 delegate.Run(host, client_id, callback); |
| 188 } |
| 189 |
| 190 gfx::GpuMemoryBufferAttribVector |
| 191 BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribs() { |
| 192 GetGpuMemoryBufferAttribsRequest request(gpu_client_id_); |
| 193 |
| 194 BrowserThread::PostTask( |
| 195 BrowserThread::IO, FROM_HERE, |
| 196 base::Bind( |
| 197 &BrowserGpuMemoryBufferManager::HandleGetGpuMemoryBufferAttribsOnIO, |
| 198 base::Unretained(this), base::Unretained(&request))); |
| 199 |
| 200 TRACE_EVENT0("browser", |
| 201 "BrowserGpuMemoryBufferManager::GetGpuMemoryBufferAttribs"); |
| 202 base::ThreadRestrictions::ScopedAllowWait allow_wait; |
| 203 request.event.Wait(); |
| 204 return request.result; |
| 205 } |
| 206 |
| 143 bool BrowserGpuMemoryBufferManager::OnMemoryDump( | 207 bool BrowserGpuMemoryBufferManager::OnMemoryDump( |
| 144 const base::trace_event::MemoryDumpArgs& args, | 208 const base::trace_event::MemoryDumpArgs& args, |
| 145 base::trace_event::ProcessMemoryDump* pmd) { | 209 base::trace_event::ProcessMemoryDump* pmd) { |
| 146 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 210 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 147 | 211 |
| 148 for (const auto& client : clients_) { | 212 for (const auto& client : clients_) { |
| 149 int client_id = client.first; | 213 int client_id = client.first; |
| 150 | 214 |
| 151 for (const auto& buffer : client.second) { | 215 for (const auto& buffer : client.second) { |
| 152 if (buffer.second.type == gfx::EMPTY_BUFFER) | 216 if (buffer.second.type == gfx::EMPTY_BUFFER) |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 format(format), | 528 format(format), |
| 465 usage(usage), | 529 usage(usage), |
| 466 gpu_host_id(gpu_host_id) {} | 530 gpu_host_id(gpu_host_id) {} |
| 467 | 531 |
| 468 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = | 532 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = |
| 469 default; | 533 default; |
| 470 | 534 |
| 471 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} | 535 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} |
| 472 | 536 |
| 473 } // namespace content | 537 } // namespace content |
| OLD | NEW |