diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-03 02:11:48 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-03 02:11:48 +0000 |
commit | 661eb9d1aa5468b984a92e66937432d881f70427 (patch) | |
tree | 81bf2b132ac6c7b05b04598e875552819222bb73 /chrome/browser/renderer_host/backing_store.h | |
parent | 99aa2dbf4962fb1a4a52a3eae9bb51ad3113b7be (diff) | |
download | chromium_src-661eb9d1aa5468b984a92e66937432d881f70427.zip chromium_src-661eb9d1aa5468b984a92e66937432d881f70427.tar.gz chromium_src-661eb9d1aa5468b984a92e66937432d881f70427.tar.bz2 |
From agl. Cleaned up version of issue 19046.
POSIX: bitmap data on the wire
On Windows, when drawing a given rect in the renderer, we allocate memory for the bitmap, render and send a shared memory handle across IPC. In the browser, we bitblit the shared memory to the backing store and draw it to the screen.
In the long term, on Linux, we want the backingstore to be shared with both X and the renderer. The renderer then draws directly to that store, sends an IPC to the browser and the browser sends a message to X to bitblit to the display. Since only cache a few backing stores we'll need messages from the browser to tell the renderer to attach and detatch from shared memory regions as they get created and evicted.
In the short term, however, to get something that works, we make a BitmapWireData typedef. This will be a shared memory region on Windows, as before, and on POSIX we'll be sending the bitmap data over the wire. Obviously this'll be pretty slow but it'll work sooner.
Review URL: http://codereview.chromium.org/19491
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9065 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host/backing_store.h')
-rw-r--r-- | chrome/browser/renderer_host/backing_store.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/chrome/browser/renderer_host/backing_store.h b/chrome/browser/renderer_host/backing_store.h index eddb4c4..ce15c88 100644 --- a/chrome/browser/renderer_host/backing_store.h +++ b/chrome/browser/renderer_host/backing_store.h @@ -10,10 +10,13 @@ #include "base/gfx/size.h" #include "base/process.h" #include "build/build_config.h" +#include "chrome/common/bitmap_wire_data.h" #include "chrome/common/mru_cache.h" #if defined(OS_WIN) #include <windows.h> +#elif defined(OS_POSIX) +#include "skia/ext/platform_canvas.h" #endif class RenderWidgetHost; @@ -33,17 +36,15 @@ class BackingStore { #endif // Paints the bitmap from the renderer onto the backing store. - // TODO(port): The HANDLE is a shared section on Windows. Abstract this. bool PaintRect(base::ProcessHandle process, - HANDLE bitmap_section, + BitmapWireData bitmap_section, const gfx::Rect& bitmap_rect); // Scrolls the given rect in the backing store, replacing the given region // identified by |bitmap_rect| by the bitmap in the file identified by the // given file handle. - // TODO(port): The HANDLE is a shared section on Windows. Abstract this. void ScrollRect(base::ProcessHandle process, - HANDLE bitmap, const gfx::Rect& bitmap_rect, + BitmapWireData bitmap, const gfx::Rect& bitmap_rect, int dx, int dy, const gfx::Rect& clip_rect, const gfx::Size& view_size); @@ -69,7 +70,9 @@ class BackingStore { // Handle to the original bitmap in the dc. HANDLE original_bitmap_; -#endif +#elif defined(OS_POSIX) + skia::PlatformCanvas canvas_; +#endif // defined(OS_WIN) DISALLOW_COPY_AND_ASSIGN(BackingStore); }; @@ -105,11 +108,10 @@ class BackingStoreManager { // needs_full_paint // Set if we need to send out a request to paint the view // to the renderer. - // TODO(port): The HANDLE is a shared section on Windows. Abstract this. static BackingStore* PrepareBackingStore(RenderWidgetHost* host, const gfx::Rect& backing_store_rect, base::ProcessHandle process_handle, - HANDLE bitmap_section, + BitmapWireData bitmap_section, const gfx::Rect& bitmap_rect, bool* needs_full_paint); |