Manually revert "4x allocation in PipeController is probably overkill."
This reverts commit 2d91efffdb57646a495de5bf859ff281ef86dd12.
Conflicts:
src/pipe/SkGPipeWrite.cpp
BUG=372671
R=mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/277653004
git-svn-id: http://skia.googlecode.com/svn/trunk@14725 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pipe/utils/SamplePipeControllers.cpp b/src/pipe/utils/SamplePipeControllers.cpp
index de26346..1e25cb6 100644
--- a/src/pipe/utils/SamplePipeControllers.cpp
+++ b/src/pipe/utils/SamplePipeControllers.cpp
@@ -13,16 +13,23 @@
#include "SkMatrix.h"
PipeController::PipeController(SkCanvas* target, SkPicture::InstallPixelRefProc proc)
- : fReader(target), fBlockSize(0), fBytesWritten(0) {
+:fReader(target) {
+ fBlock = NULL;
+ fBlockSize = fBytesWritten = 0;
fReader.setBitmapDecoder(proc);
}
-void* PipeController::requestBlock(size_t minRequest, size_t* actual) {
- fBlockSize = minRequest;
- fBlock.reset(fBlockSize);
+PipeController::~PipeController() {
+ sk_free(fBlock);
+}
+
+void* PipeController::requestBlock(size_t minRequest, size_t *actual) {
+ sk_free(fBlock);
+ fBlockSize = minRequest * 4;
+ fBlock = sk_malloc_throw(fBlockSize);
fBytesWritten = 0;
*actual = fBlockSize;
- return fBlock.get();
+ return fBlock;
}
void PipeController::notifyWritten(size_t bytes) {
diff --git a/src/pipe/utils/SamplePipeControllers.h b/src/pipe/utils/SamplePipeControllers.h
index e8cc23b..35cfba7 100644
--- a/src/pipe/utils/SamplePipeControllers.h
+++ b/src/pipe/utils/SamplePipeControllers.h
@@ -17,14 +17,14 @@
class PipeController : public SkGPipeController {
public:
PipeController(SkCanvas* target, SkPicture::InstallPixelRefProc proc = NULL);
-
+ virtual ~PipeController();
virtual void* requestBlock(size_t minRequest, size_t* actual) SK_OVERRIDE;
virtual void notifyWritten(size_t bytes) SK_OVERRIDE;
protected:
- const void* getData() { return (const char*) fBlock.get() + fBytesWritten; }
+ const void* getData() { return (const char*) fBlock + fBytesWritten; }
SkGPipeReader fReader;
private:
- SkAutoMalloc fBlock;
+ void* fBlock;
size_t fBlockSize;
size_t fBytesWritten;
SkGPipeReader::Status fStatus;