diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-20 01:20:47 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-02-20 01:20:47 +0000 |
commit | 024e9386c24b862cae3a4cf4bd22fd4651b02cc5 (patch) | |
tree | 12f9a2c80e2a142856c1adefc3253f66a491f0bb /chrome/plugin | |
parent | 9cf005d236d090fb18d8a5b6c6c630a94e893ef4 (diff) | |
download | chromium_src-024e9386c24b862cae3a4cf4bd22fd4651b02cc5.zip chromium_src-024e9386c24b862cae3a4cf4bd22fd4651b02cc5.tar.gz chromium_src-024e9386c24b862cae3a4cf4bd22fd4651b02cc5.tar.bz2 |
Revert 39530 - GPU plugin forwards repaint events to Pepper plugin.
WM_PAINT results in a call to Pepper repaint callback.
Implemented WM_ERASEBKGND to prevent flickering on repaint.
Implemented PGL_NO_CONTEXT (copied from EGL spec). This is already reviewed by alokp but unfortunately got entangled with this CL.
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/571018
TBR=alokp@chromium.org
Review URL: http://codereview.chromium.org/650100
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@39535 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/plugin')
-rw-r--r-- | chrome/plugin/command_buffer_stub.cc | 84 | ||||
-rw-r--r-- | chrome/plugin/command_buffer_stub.h | 11 | ||||
-rw-r--r-- | chrome/plugin/command_buffer_stub_win.cc | 78 |
3 files changed, 24 insertions, 149 deletions
diff --git a/chrome/plugin/command_buffer_stub.cc b/chrome/plugin/command_buffer_stub.cc index 21e53e3..e6f4b76 100644 --- a/chrome/plugin/command_buffer_stub.cc +++ b/chrome/plugin/command_buffer_stub.cc @@ -3,7 +3,7 @@ // found in the LICENSE file. #include "base/callback.h" -#include "base/scoped_open_process.h" +#include "base/process_util.h" #include "base/shared_memory.h" #include "chrome/common/command_buffer_messages.h" #include "chrome/common/plugin_messages.h" @@ -23,7 +23,6 @@ CommandBufferStub::CommandBufferStub(PluginChannel* channel, } CommandBufferStub::~CommandBufferStub() { - Destroy(); channel_->RemoveRoute(route_id_); } @@ -68,54 +67,35 @@ void CommandBufferStub::OnInitialize(int32 size, // Assume service is responsible for duplicating the handle from the calling // process. - base::ScopedOpenProcess peer_process; - if (!peer_process.Open(channel_->peer_pid())) + base::ProcessHandle peer_handle; + if (!base::OpenProcessHandle(channel_->peer_pid(), &peer_handle)) return; command_buffer_.reset(new gpu::CommandBufferService); - // Initialize the CommandBufferService. - if (!command_buffer_->Initialize(size)) { - Destroy(); - return; - } - - // Get the ring buffer. - Buffer buffer = command_buffer_->GetRingBuffer(); - if (!buffer.shared_memory) { - Destroy(); - return; - } - - // Initialize the GPUProcessor. - processor_ = new gpu::GPUProcessor(command_buffer_.get()); - if (!processor_->Initialize(window_)) { - Destroy(); - return; - } - - // Perform platform specific initialization. - if (!InitializePlatformSpecific()) { - Destroy(); - return; - } - - // Share the ring buffer to the client process. - if (!buffer.shared_memory->ShareToProcess(peer_process.handle(), - ring_buffer)) { - Destroy(); - return; - } - - // Setup callbacks for events. - command_buffer_->SetPutOffsetChangeCallback( - NewCallback(processor_.get(), - &gpu::GPUProcessor::ProcessCommands)); + // Initialize the CommandBufferService and GPUProcessor. + if (command_buffer_->Initialize(size)) { + Buffer buffer = command_buffer_->GetRingBuffer(); + if (buffer.shared_memory) { + processor_ = new gpu::GPUProcessor(command_buffer_.get()); + if (processor_->Initialize(window_)) { + command_buffer_->SetPutOffsetChangeCallback( + NewCallback(processor_.get(), + &gpu::GPUProcessor::ProcessCommands)); #if defined(OS_MACOSX) - processor_->SetSwapBuffersCallback( - NewCallback(this, - &CommandBufferStub::SwapBuffersCallback)); + processor_->SetSwapBuffersCallback( + NewCallback(this, + &CommandBufferStub::SwapBuffersCallback)); #endif + buffer.shared_memory->ShareToProcess(peer_handle, ring_buffer); + } else { + processor_ = NULL; + command_buffer_.reset(); + } + } + } + + base::CloseProcessHandle(peer_handle); } void CommandBufferStub::OnGetState(gpu::CommandBuffer::State* state) { @@ -167,22 +147,6 @@ void CommandBufferStub::OnGetTransferBuffer( base::CloseProcessHandle(peer_handle); } -void CommandBufferStub::Destroy() { - processor_ = NULL; - command_buffer_.reset(); - - DestroyPlatformSpecific(); -} - -#if !defined(OS_WIN) -bool CommandBufferStub::InitializePlatformSpecific() { - return true; -} - -void CommandBufferStub::DestroyPlatformSpecific() { -} -#endif // defined(OS_WIN) - #if defined(OS_MACOSX) void CommandBufferStub::OnSetWindowSize(int32 width, int32 height) { uint64 new_backing_store = processor_->SetWindowSize(width, height); diff --git a/chrome/plugin/command_buffer_stub.h b/chrome/plugin/command_buffer_stub.h index f7bd691..f0d8ac0 100644 --- a/chrome/plugin/command_buffer_stub.h +++ b/chrome/plugin/command_buffer_stub.h @@ -37,10 +37,6 @@ class CommandBufferStub : public IPC::Channel::Listener, int route_id() const { return route_id_; } - // Notify the client that it must repaint due to the window becoming invalid - // or a lost context. - void NotifyRepaint(); - private: // Message handlers: void OnInitialize(int32 size, base::SharedMemoryHandle* ring_buffer); @@ -53,13 +49,6 @@ class CommandBufferStub : public IPC::Channel::Listener, void OnGetTransferBuffer(int32 id, base::SharedMemoryHandle* transfer_buffer, uint32* size); - - // Destroy all owned objects. - void Destroy(); - - bool InitializePlatformSpecific(); - void DestroyPlatformSpecific(); - #if defined(OS_MACOSX) void OnSetWindowSize(int32 width, int32 height); void SwapBuffersCallback(); diff --git a/chrome/plugin/command_buffer_stub_win.cc b/chrome/plugin/command_buffer_stub_win.cc deleted file mode 100644 index 656bbd1..0000000 --- a/chrome/plugin/command_buffer_stub_win.cc +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include <windows.h> - -#include "chrome/common/command_buffer_messages.h" -#include "chrome/plugin/command_buffer_stub.h" - -namespace { -const wchar_t* kPreviousWndProcProperty = L"CommandBufferStubPrevWndProc"; -const wchar_t* kCommandBufferStubProperty = L"CommandBufferStub"; - -// Message handler for the GPU plugin's child window. Used to intercept -// WM_PAINT events and forward repaint notifications to the client. -LRESULT WINAPI WndProc(HWND handle, - UINT message, - WPARAM w_param, - LPARAM l_param) { - WNDPROC previous_wnd_proc = reinterpret_cast<WNDPROC>( - ::GetProp(handle, kPreviousWndProcProperty)); - CommandBufferStub* stub = reinterpret_cast<CommandBufferStub*>( - ::GetProp(handle, kCommandBufferStubProperty)); - - switch (message) { - case WM_ERASEBKGND: - // Do not clear background. Avoids flickering. - return 1; - case WM_PAINT: - // Validate the whole window to prevent another WM_PAINT message. - ValidateRect(handle, NULL); - - // Notify client that the window is invalid and needs to be repainted. - stub->NotifyRepaint(); - - return 1; - default: - return CallWindowProc(previous_wnd_proc, - handle, - message, - w_param, - l_param); - } -} -} // namespace anonymous - -void CommandBufferStub::NotifyRepaint() { - Send(new CommandBufferMsg_NotifyRepaint(route_id_)); -} - -bool CommandBufferStub::InitializePlatformSpecific() { - // Subclass window. - WNDPROC previous_wnd_proc = reinterpret_cast<WNDPROC>( - ::GetWindowLongPtr(window_, GWLP_WNDPROC)); - ::SetProp(window_, - kPreviousWndProcProperty, - reinterpret_cast<HANDLE>(previous_wnd_proc)); - ::SetWindowLongPtr(window_, - GWLP_WNDPROC, - reinterpret_cast<LONG_PTR>(WndProc)); - - // Record pointer to this in window. - ::SetProp(window_, - kCommandBufferStubProperty, - reinterpret_cast<HANDLE>(this)); - - return true; -} - -void CommandBufferStub::DestroyPlatformSpecific() { - // Restore window. - WNDPROC previous_wnd_proc = reinterpret_cast<WNDPROC>( - ::GetProp(window_, kPreviousWndProcProperty)); - ::SetWindowLongPtr(window_, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>( - previous_wnd_proc)); - ::RemoveProp(window_, kPreviousWndProcProperty); - ::RemoveProp(window_, kCommandBufferStubProperty); -} |