OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/common/gpu/texture_image_transport_surface.h" | 5 #include "content/common/gpu/texture_image_transport_surface.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 DCHECK(stub_destroyed_); | 47 DCHECK(stub_destroyed_); |
48 Destroy(); | 48 Destroy(); |
49 } | 49 } |
50 | 50 |
51 bool TextureImageTransportSurface::Initialize() { | 51 bool TextureImageTransportSurface::Initialize() { |
52 mailbox_manager_ = | 52 mailbox_manager_ = |
53 helper_->stub()->decoder()->GetContextGroup()->mailbox_manager(); | 53 helper_->stub()->decoder()->GetContextGroup()->mailbox_manager(); |
54 | 54 |
55 GpuChannelManager* manager = helper_->manager(); | 55 GpuChannelManager* manager = helper_->manager(); |
56 surface_ = manager->GetDefaultOffscreenSurface(); | 56 surface_ = manager->GetDefaultOffscreenSurface(); |
57 if (!surface_.get()) | 57 if (!surface_) |
58 return false; | 58 return false; |
59 | 59 |
60 if (!helper_->Initialize()) | 60 if (!helper_->Initialize()) |
61 return false; | 61 return false; |
62 | 62 |
63 GpuChannel* parent_channel = manager->LookupChannel(handle_.parent_client_id); | 63 GpuChannel* parent_channel = manager->LookupChannel(handle_.parent_client_id); |
64 if (parent_channel) { | 64 if (parent_channel) { |
65 const CommandLine* command_line = CommandLine::ForCurrentProcess(); | 65 const CommandLine* command_line = CommandLine::ForCurrentProcess(); |
66 if (command_line->HasSwitch(switches::kUIPrioritizeInGpuProcess)) | 66 if (command_line->HasSwitch(switches::kUIPrioritizeInGpuProcess)) |
67 helper_->SetPreemptByFlag(parent_channel->GetPreemptionFlag()); | 67 helper_->SetPreemptByFlag(parent_channel->GetPreemptionFlag()); |
68 } | 68 } |
69 | 69 |
70 return true; | 70 return true; |
71 } | 71 } |
72 | 72 |
73 void TextureImageTransportSurface::Destroy() { | 73 void TextureImageTransportSurface::Destroy() { |
74 if (surface_.get()) | 74 if (surface_) |
75 surface_ = NULL; | 75 surface_ = NULL; |
76 | 76 |
77 helper_->Destroy(); | 77 helper_->Destroy(); |
78 } | 78 } |
79 | 79 |
80 bool TextureImageTransportSurface::DeferDraws() { | 80 bool TextureImageTransportSurface::DeferDraws() { |
81 // The command buffer hit a draw/clear command that could clobber the | 81 // The command buffer hit a draw/clear command that could clobber the |
82 // texture in use by the UI compositor. If a Swap is pending, abort | 82 // texture in use by the UI compositor. If a Swap is pending, abort |
83 // processing of the command by returning true and unschedule until the Swap | 83 // processing of the command by returning true and unschedule until the Swap |
84 // Ack arrives. | 84 // Ack arrives. |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 mailbox_name.copy(reinterpret_cast<char *>(&mailbox_name_), | 322 mailbox_name.copy(reinterpret_cast<char *>(&mailbox_name_), |
323 sizeof(MailboxName)); | 323 sizeof(MailboxName)); |
324 ConsumeTexture(); | 324 ConsumeTexture(); |
325 } | 325 } |
326 | 326 |
327 if (stub_destroyed_ && backbuffer_->service_id()) { | 327 if (stub_destroyed_ && backbuffer_->service_id()) { |
328 // TODO(sievers): Remove this after changes to the mailbox to take ownership | 328 // TODO(sievers): Remove this after changes to the mailbox to take ownership |
329 // of the service ids. | 329 // of the service ids. |
330 DCHECK(context_.get() && surface_.get()); | 330 DCHECK(context_.get() && surface_.get()); |
331 uint32 service_id = backbuffer_->ReleaseServiceId(); | 331 uint32 service_id = backbuffer_->ReleaseServiceId(); |
332 if (context_->MakeCurrent(surface_.get())) | 332 if (context_->MakeCurrent(surface_)) |
333 glDeleteTextures(1, &service_id); | 333 glDeleteTextures(1, &service_id); |
334 | 334 |
335 return; | 335 return; |
336 } | 336 } |
337 | 337 |
338 DCHECK(is_swap_buffers_pending_); | 338 DCHECK(is_swap_buffers_pending_); |
339 is_swap_buffers_pending_ = false; | 339 is_swap_buffers_pending_ = false; |
340 | 340 |
341 // We should not have allowed the backbuffer to be discarded while the ack | 341 // We should not have allowed the backbuffer to be discarded while the ack |
342 // was pending. | 342 // was pending. |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 GL_TEXTURE_2D, | 495 GL_TEXTURE_2D, |
496 mailbox_name_, | 496 mailbox_name_, |
497 backbuffer_.release(), | 497 backbuffer_.release(), |
498 NULL); | 498 NULL); |
499 DCHECK(success); | 499 DCHECK(success); |
500 mailbox_name_ = MailboxName(); | 500 mailbox_name_ = MailboxName(); |
501 backbuffer_.reset(CreateTextureDefinition(gfx::Size(), 0)); | 501 backbuffer_.reset(CreateTextureDefinition(gfx::Size(), 0)); |
502 } | 502 } |
503 | 503 |
504 } // namespace content | 504 } // namespace content |
OLD | NEW |