Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3803)

Unified Diff: chrome/renderer/render_process.h

Issue 21485: Bitmap transport (Closed)
Patch Set: Fix some mac crashes Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_;

Powered by Google App Engine
This is Rietveld 408576698