| Index: content/browser/renderer_host/resource_buffer.h
|
| ===================================================================
|
| --- content/browser/renderer_host/resource_buffer.h (revision 170763)
|
| +++ content/browser/renderer_host/resource_buffer.h (working copy)
|
| @@ -1,128 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -#ifndef CONTENT_BROWSER_RENDERER_HOST_RESOURCE_BUFFER_H_
|
| -#define CONTENT_BROWSER_RENDERER_HOST_RESOURCE_BUFFER_H_
|
| -
|
| -#include <queue>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/shared_memory.h"
|
| -#include "content/common/content_export.h"
|
| -
|
| -namespace content {
|
| -
|
| -// ResourceBuffer implements a simple "circular buffer" allocation strategy.
|
| -// Allocations are recycled in FIFO order.
|
| -//
|
| -// You can think of the ResourceBuffer as a FIFO. The Allocate method reserves
|
| -// space in the buffer. Allocate may be called multiple times until the buffer
|
| -// is fully reserved (at which point CanAllocate returns false). Allocations
|
| -// are freed in FIFO order via a call to RecycleLeastRecentlyAllocated.
|
| -//
|
| -// ResourceBuffer is reference-counted for the benefit of consumers, who need
|
| -// to ensure that ResourceBuffer stays alive while they are using its memory.
|
| -//
|
| -// EXAMPLE USAGE:
|
| -//
|
| -// // Writes data into the ResourceBuffer, and returns the location (byte
|
| -// // offset and count) of the bytes written into the ResourceBuffer's shared
|
| -// // memory buffer.
|
| -// void WriteToBuffer(ResourceBuffer* buf, int* offset, int* count) {
|
| -// DCHECK(buf->CanAllocate());
|
| -//
|
| -// *offset = -1;
|
| -// *count = 0;
|
| -//
|
| -// int size;
|
| -// char* ptr = buf->Allocate(&size);
|
| -// if (!ptr) { /* handle error */ }
|
| -//
|
| -// int bytes_read = static_cast<int>(fread(ptr, 1, size, file_pointer_));
|
| -// if (!bytes_read) { /* handle error */ }
|
| -//
|
| -// if (bytes_read < size)
|
| -// buf->ShrinkLastAllocation(bytes_read);
|
| -//
|
| -// *offset = buf->GetLastAllocationOffset();
|
| -// *count = bytes_read;
|
| -// }
|
| -//
|
| -// NOTE: As the above example illustrates, the ResourceBuffer keeps track of
|
| -// the last allocation made. Calling ShrinkLastAllocation is optional, as it
|
| -// just helps the ResourceBuffer optimize storage and be more aggressive about
|
| -// returning larger allocations from the Allocate method.
|
| -//
|
| -class CONTENT_EXPORT ResourceBuffer
|
| - : public base::RefCountedThreadSafe<ResourceBuffer> {
|
| - public:
|
| - ResourceBuffer();
|
| -
|
| - // Initialize the shared memory buffer. It will be buffer_size bytes in
|
| - // length. The min/max_allocation_size parameters control the behavior of
|
| - // the Allocate method. It will prefer to return segments that are
|
| - // max_allocation_size in length, but will return segments less than that if
|
| - // space is limited. It will not return allocations smaller than
|
| - // min_allocation_size.
|
| - bool Initialize(int buffer_size,
|
| - int min_allocation_size,
|
| - int max_allocation_size);
|
| - bool IsInitialized() const;
|
| -
|
| - // Returns a shared memory handle that can be passed to the given process.
|
| - // The shared memory handle is only intended to be interpretted by code
|
| - // running in the specified process. NOTE: The caller should ensure that
|
| - // this memory eventually be returned to the operating system.
|
| - bool ShareToProcess(base::ProcessHandle process_handle,
|
| - base::SharedMemoryHandle* shared_memory_handle,
|
| - int* shared_memory_size);
|
| -
|
| - // Returns true if Allocate will succeed.
|
| - bool CanAllocate() const;
|
| -
|
| - // Returns a pointer into the shared memory buffer or NULL if the buffer is
|
| - // already fully allocated. The returned size will be max_allocation_size
|
| - // unless the buffer is close to being full.
|
| - char* Allocate(int* size);
|
| -
|
| - // Returns the offset into the shared memory buffer where the last allocation
|
| - // returned by Allocate can be found.
|
| - int GetLastAllocationOffset() const;
|
| -
|
| - // Called to reduce the size of the last allocation returned by Allocate. It
|
| - // is OK for new_size to match the current size of the last allocation.
|
| - void ShrinkLastAllocation(int new_size);
|
| -
|
| - // Called to allow reuse of memory that was previously allocated. See notes
|
| - // above the class for more details about this method.
|
| - void RecycleLeastRecentlyAllocated();
|
| -
|
| - private:
|
| - friend class base::RefCountedThreadSafe<ResourceBuffer>;
|
| - ~ResourceBuffer();
|
| -
|
| - base::SharedMemory shared_mem_;
|
| -
|
| - int buf_size_;
|
| - int min_alloc_size_;
|
| - int max_alloc_size_;
|
| -
|
| - // These point to the range of the shared memory that is currently allocated.
|
| - // If alloc_start_ is -1, then the range is empty and nothing is allocated.
|
| - // Otherwise, alloc_start_ points to the start of the allocated range, and
|
| - // alloc_end_ points just beyond the end of the previous allocation. In the
|
| - // wraparound case, alloc_end_ <= alloc_start_. See resource_buffer.cc for
|
| - // more details about these members.
|
| - int alloc_start_;
|
| - int alloc_end_;
|
| -
|
| - std::queue<int> alloc_sizes_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ResourceBuffer);
|
| -};
|
| -
|
| -} // namespace content
|
| -
|
| -#endif // CONTENT_BROWSER_RENDERER_HOST_RESOURCE_BUFFER_H_
|
|
|