Index: chrome/renderer/render_process.h |
diff --git a/chrome/renderer/render_process.h b/chrome/renderer/render_process.h |
index 6ba090526ca809d3a3e9dc6f4beb813469a913ec..9c4cabe121f89d5471349e2b678749f52f8fa5cc 100644 |
--- a/chrome/renderer/render_process.h |
+++ b/chrome/renderer/render_process.h |
@@ -5,13 +5,17 @@ |
#ifndef CHROME_RENDERER_RENDER_PROCESS_H__ |
#define CHROME_RENDERER_RENDER_PROCESS_H__ |
+#include "base/timer.h" |
#include "chrome/common/child_process.h" |
#include "chrome/renderer/render_thread.h" |
+#include "skia/ext/platform_canvas.h" |
-namespace base { |
- class SharedMemory; |
+namespace gfx { |
+class Rect; |
} |
+class TransportDIB; |
+ |
// Represents the renderer end of the browser<->renderer connection. The |
// opposite end is the RenderProcessHost. This is a singleton object for |
// each renderer. |
@@ -23,19 +27,19 @@ class RenderProcess : public ChildProcess { |
// Returns true if plugins should be loaded in-process. |
static bool ShouldLoadPluginsInProcess(); |
- // Allocates shared memory. When no longer needed, you should pass the |
- // SharedMemory pointer to FreeSharedMemory so it can be recycled. The size |
- // reported in the resulting SharedMemory object will be greater than or |
- // equal to the requested size. This method returns NULL if unable to |
- // allocate memory for some reason. |
- static base::SharedMemory* AllocSharedMemory(size_t size); |
+ // Get a canvas suitable for drawing and transporting to the browser |
+ // memory: (output) the transport DIB memory |
+ // rect: the rectangle which will be painted, use for sizing the canvas |
+ // returns: NULL on error |
+ // |
+ // When no longer needed, you should pass the TransportDIB to |
+ // ReleaseTransportDIB so that it can be recycled. |
+ static skia::PlatformCanvas* GetDrawingCanvas( |
+ TransportDIB** memory, const gfx::Rect& rect); |
// Frees shared memory allocated by AllocSharedMemory. You should only use |
// this function to free the SharedMemory object. |
- static void FreeSharedMemory(base::SharedMemory* mem); |
- |
- // Deletes the shared memory allocated by AllocSharedMemory. |
- static void DeleteSharedMem(base::SharedMemory* mem); |
+ static void ReleaseTransportDIB(TransportDIB* memory); |
private: |
friend class ChildProcessFactory<RenderProcess>; |
@@ -50,21 +54,28 @@ class RenderProcess : public ChildProcess { |
static ChildProcess* ClassFactory(const std::wstring& channel_name); |
- // Look in the shared memory cache for a suitable object to reuse. Returns |
- // NULL if there is none. |
- base::SharedMemory* GetSharedMemFromCache(size_t size); |
+ // Look in the shared memory cache for a suitable object to reuse. |
+ // result: (output) the memory found |
+ // size: the resulting memory will be >= this size, in bytes |
+ // returns: false if a suitable DIB memory could not be found |
+ bool GetTransportDIBFromCache(TransportDIB** result, size_t size); |
- // Maybe put the given shared memory into the shared memory cache. Returns |
+ // Maybe put the given shared memory into the shared memory cache. Returns |
// true if the SharedMemory object was stored in the cache; otherwise, false |
// is returned. |
- bool PutSharedMemInCache(base::SharedMemory* mem); |
+ bool PutSharedMemInCache(TransportDIB* memory); |
- void ClearSharedMemCache(); |
+ void ClearTransportDIBCache(); |
- // We want to lazily clear the shared memory cache if no one has requested |
- // memory. This methods are used to schedule a deferred call to |
- // RenderProcess::ClearSharedMemCache. |
- void ScheduleCacheClearer(); |
+ // Return the index of a free cache slot in which to install a transport DIB |
+ // of the given size. If all entries in the cache are larger than the given |
+ // size, this doesn't free any slots and returns -1. |
+ int FindFreeCacheSlot(size_t size); |
+ |
+ // Create a new transport DIB of, at least, the given size. Return NULL on |
+ // error. |
+ TransportDIB* CreateTransportDIB(size_t size); |
+ void FreeTransportDIB(TransportDIB*); |
// ChildProcess implementation |
virtual void Cleanup(); |
@@ -74,10 +85,13 @@ class RenderProcess : public ChildProcess { |
// A very simplistic and small cache. If an entry in this array is non-null, |
// then it points to a SharedMemory object that is available for reuse. |
- base::SharedMemory* shared_mem_cache_[2]; |
+ TransportDIB* shared_mem_cache_[2]; |
+ |
+ // This DelayTimer cleans up our cache 5 seconds after the last use. |
+ base::DelayTimer<RenderProcess> shared_mem_cache_cleaner_; |
- // This factory is used to lazily invoke ClearSharedMemCache. |
- ScopedRunnableMethodFactory<RenderProcess> clearer_factory_; |
+ // TransportDIB sequence number |
+ uint32 sequence_number_; |
static bool load_plugins_in_process_; |