Remove GrAuto*Malloc, replace with SkAuto*Malloc
authorbsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 30 Jun 2011 21:32:31 +0000 (21:32 +0000)
committerbsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 30 Jun 2011 21:32:31 +0000 (21:32 +0000)
Review URL: http://codereview.appspot.com/4629088

git-svn-id: http://skia.googlecode.com/svn/trunk@1774 2bbb7eff-a529-9590-31e7-b0007b416f81

16 files changed:
gpu/include/GrMemory.h [deleted file]
gpu/src/GrAtlas.cpp
gpu/src/GrBufferAllocPool.cpp
gpu/src/GrBufferAllocPool.h
gpu/src/GrContext.cpp
gpu/src/GrGLProgram.cpp
gpu/src/GrGLTexture.cpp
gpu/src/GrGpu.cpp
gpu/src/GrGpuGL.cpp
gpu/src/GrGpuGLShaders.cpp
gpu/src/GrMemory.cpp
gpu/src/GrPathRenderer.cpp
gpu/src/GrTesselatedPathRenderer.cpp
gpu/src/GrTextStrike.cpp
gyp/gpu.gyp
include/core/SkTemplates.h

diff --git a/gpu/include/GrMemory.h b/gpu/include/GrMemory.h
deleted file mode 100644 (file)
index be8b1d7..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-    Copyright 2010 Google Inc.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
- */
-
-
-#ifndef GrMemory_DEFINED
-#define GrMemory_DEFINED
-
-#include "GrNoncopyable.h"
-
-class GrAutoMalloc : GrNoncopyable {
-public:
-    GrAutoMalloc() : fPtr(NULL), fAllocatedBytes(0){
-    }
-
-    GrAutoMalloc(size_t bytes) : fPtr(GrMalloc(bytes)), fAllocatedBytes(bytes) {}
-    ~GrAutoMalloc() { GrFree(fPtr); }
-
-    /**
-     *  Return the allocated memory, or NULL if it has already been freed or
-     *  detached.
-     */
-    void* get() const { return fPtr; }
-
-    size_t size() const { return fAllocatedBytes; }
-
-    /**
-     *  transfer ownership of the memory to the caller. It must be freed with
-     *  a call to GrFree()
-     */
-    void* detach() {
-        void* ptr = fPtr;
-        fPtr = NULL;    // we no longer own the block
-        fAllocatedBytes = 0;
-        return ptr;
-    }
-
-    /**
-     *  Reallocates to a new size. May or may not call malloc. The contents
-     *  are not preserved. If growOnly is true it will never reduce the
-     *  allocated size.
-     */
-    void* realloc(size_t newSize, bool growOnly = false) {
-        bool alloc;
-        if (growOnly) {
-            alloc = newSize > fAllocatedBytes;
-        } else {
-            alloc = newSize != fAllocatedBytes;
-        }
-        if (alloc) {
-            GrFree(fPtr);
-            fPtr = newSize ? GrMalloc(newSize) : NULL;
-            fAllocatedBytes = newSize;
-        }
-        GrAssert(fAllocatedBytes >= newSize);
-        GR_DEBUGCODE(memset(fPtr, 0xEF, fAllocatedBytes));
-        return fPtr;
-    }
-
-    /**
-     *  free the block now. get() will now return NULL
-     */
-    void free() {
-        GrFree(fPtr);
-        fPtr = NULL;
-        fAllocatedBytes = 0;
-    }
-
-private:
-    void* fPtr;
-    size_t fAllocatedBytes;
-};
-
-/**
- *  Variant of GrAutoMalloc with a compile-time specified byte size that is
- *  pre-allocated in the class object, avoiding a call to to GrMalloc if
- *  possible.
- */
-template <size_t SIZE> class GrAutoSMalloc : GrNoncopyable {
-public:
-    GrAutoSMalloc() {
-        fPtr = fStorage;
-        fAllocatedBytes = SIZE;
-    }
-
-    explicit GrAutoSMalloc(size_t bytes) {
-        if (bytes > SIZE) {
-            fPtr = GrMalloc(bytes);
-            fAllocatedBytes = bytes;
-        } else {
-            fPtr = fStorage;
-            fAllocatedBytes = SIZE;
-        }
-    }
-
-    ~GrAutoSMalloc() {
-        if (fPtr != (void*)fStorage) {
-            GrFree(fPtr);
-        }
-    }
-
-    /**
-     *  Return the allocated memory, or NULL if it has already been freed or
-     *  detached.
-     */
-    void* get() const { return fPtr; }
-
-    /**
-     *  Reallocates to a new size. May or may not call malloc. The contents
-     *  are not preserved. If growOnly is true it will never reduce the
-     *  allocated size.
-     */
-    void* realloc(size_t newSize, bool growOnly = false) {
-        if (newSize <= SIZE) {
-            if (NULL == fPtr) {
-                fPtr = fStorage;
-                fAllocatedBytes = SIZE;
-            } else if (!growOnly && fPtr != (void*)fStorage) {
-                GrFree(fPtr);
-                fPtr = fStorage;
-                fAllocatedBytes = SIZE;
-            }
-        } else if ((newSize > fAllocatedBytes) ||
-                   (!growOnly && newSize < (fAllocatedBytes >> 1))) {
-            if (NULL != fPtr && fPtr != (void*)fStorage) {
-                GrFree(fPtr);
-            }
-            fPtr = GrMalloc(newSize);
-            fAllocatedBytes = newSize;
-        }
-        GrAssert(fAllocatedBytes >= newSize);
-        GrAssert((fPtr == fStorage) == (fAllocatedBytes == SIZE));
-        GR_DEBUGCODE(memset(fPtr, 0xEF, fAllocatedBytes));
-        return fPtr;
-    }
-
-    /**
-     *  free the block now. get() will now return NULL
-     */
-    void free() {
-        if (fPtr != (void*)fStorage) {
-            GrFree(fPtr);
-        }
-        fAllocatedBytes = 0;
-        fPtr = NULL;
-    }
-
-private:
-    void*    fPtr;
-    uint32_t fAllocatedBytes;
-    uint32_t fStorage[GrALIGN4(SIZE) >> 2];
-};
-
-/**
- *  Variant of GrAutoMalloc with a compile-time specified byte size that is
- *  pre-allocated in the class object, avoiding a call to to GrMalloc if
- *  possible.
- */
-template <int COUNT, typename T>
-class GrAutoSTMalloc : public GrAutoSMalloc<COUNT * sizeof(T)> {
-public:
-    GrAutoSTMalloc(int count) : GrAutoSMalloc<COUNT * sizeof(T)>(count * sizeof(T)) {}
-
-    operator T*() { return (T*)this->get(); }
-};
-
-
-#endif
-
index c623952..6f2ed9e 100644 (file)
@@ -17,7 +17,6 @@
 
 #include "GrAtlas.h"
 #include "GrGpu.h"
-#include "GrMemory.h"
 #include "GrRectanizer.h"
 #include "GrPlotMgr.h"
 
@@ -97,7 +96,7 @@ bool GrAtlas::addSubImage(int width, int height, const void* image,
         return false;
     }
 
-    GrAutoSMalloc<1024> storage;
+    SkAutoSMalloc<1024> storage;
     int dstW = width + 2*BORDER;
     int dstH = height + 2*BORDER;
     if (BORDER) {
index 73d707f..5e9dbea 100644 (file)
@@ -98,7 +98,7 @@ void GrBufferAllocPool::reset() {
         fFirstPreallocBuffer = (fFirstPreallocBuffer + fPreallocBuffersInUse) %
                                fPreallocBuffers.count();
     }
-    fCpuData.realloc(fGpu->supportsBufferLocking() ? 0 : fMinBlockSize);
+    fCpuData.alloc(fGpu->supportsBufferLocking() ? 0 : fMinBlockSize);
     GrAssert(0 == fPreallocBuffersInUse);
     VALIDATE();
 }
@@ -128,7 +128,6 @@ void GrBufferAllocPool::validate(bool unusedBlockAllowed) const {
             GrAssert(buf->lockPtr() == fBufferPtr);
         } else {
             GrAssert(fCpuData.get() == fBufferPtr);
-            GrAssert(fCpuData.size() == fBlocks.back().fBuffer->size());
         }
     } else {
         GrAssert(fBlocks.empty() || !fBlocks.back().fBuffer->isLocked());
@@ -286,7 +285,7 @@ bool GrBufferAllocPool::createBlock(size_t requestSize) {
     }
 
     if (NULL == fBufferPtr) {
-        fBufferPtr = fCpuData.realloc(size);
+        fBufferPtr = fCpuData.alloc(size);
     }
 
     VALIDATE(true);
@@ -318,7 +317,6 @@ void GrBufferAllocPool::flushCpuData(GrGeometryBuffer* buffer,
     GrAssert(NULL != buffer);
     GrAssert(!buffer->isLocked());
     GrAssert(fCpuData.get() == fBufferPtr);
-    GrAssert(fCpuData.size() == buffer->size());
     GrAssert(flushSize <= buffer->size());
 
     bool updated = false;
index c18e36b..79036f2 100644 (file)
@@ -21,7 +21,6 @@
 #include "GrNoncopyable.h"
 #include "GrTDArray.h"
 #include "GrTArray.h"
-#include "GrMemory.h"
 
 class GrGeometryBuffer;
 class GrGpu;
@@ -184,8 +183,8 @@ private:
     GrTArray<BufferBlock>           fBlocks;
     int                             fPreallocBuffersInUse;
     int                             fFirstPreallocBuffer;
-    GrAutoMalloc                    fCpuData;
-    void*                              fBufferPtr;
+    SkAutoMalloc                    fCpuData;
+    void*                           fBufferPtr;
 };
 
 class GrVertexBuffer;
index d97974a..4982704 100644 (file)
@@ -20,7 +20,6 @@
 #include "GrGpu.h"
 #include "GrIndexBuffer.h"
 #include "GrInOrderDrawBuffer.h"
-#include "GrMemory.h"
 #include "GrPathRenderer.h"
 #include "GrPathUtils.h"
 #include "GrTextureCache.h"
@@ -291,7 +290,7 @@ GrTextureEntry* GrContext::createAndLockTexture(GrTextureKey* key,
             rtDesc.fWidth  = GrNextPow2(desc.fWidth);
             rtDesc.fHeight = GrNextPow2(desc.fHeight);
             int bpp = GrBytesPerPixel(desc.fFormat);
-            GrAutoSMalloc<128*128*4> stretchedPixels(bpp *
+            SkAutoSMalloc<128*128*4> stretchedPixels(bpp *
                                                      rtDesc.fWidth *
                                                      rtDesc.fHeight);
             stretchImage(stretchedPixels.get(), rtDesc.fWidth, rtDesc.fHeight,
index 319995c..733e705 100644 (file)
@@ -18,7 +18,6 @@
 
 #include "GrBinHashKey.h"
 #include "GrGLConfig.h"
-#include "GrMemory.h"
 
 #include "SkXfermode.h"
 #include SK_USER_TRACE_INCLUDE_FILE
@@ -775,7 +774,7 @@ GrGLuint GrGLProgram::CompileShader(GrGLenum type,
     if (!compiled) {
         GrGLint infoLen = GR_GL_INIT_ZERO;
         GR_GL(GetShaderiv(shader, GR_GL_INFO_LOG_LENGTH, &infoLen));
-        GrAutoMalloc log(sizeof(char)*(infoLen+1)); // outside if for debugger
+        SkAutoMalloc log(sizeof(char)*(infoLen+1)); // outside if for debugger
         if (infoLen > 0) {
             GR_GL(GetShaderInfoLog(shader, infoLen+1, NULL, (char*)log.get()));
             for (int i = 0; i < stringCnt; ++i) {
@@ -853,7 +852,7 @@ bool GrGLProgram::bindOutputsAttribsAndLinkProgram(
     if (!linked) {
         GrGLint infoLen = GR_GL_INIT_ZERO;
         GR_GL(GetProgramiv(progID, GR_GL_INFO_LOG_LENGTH, &infoLen));
-        GrAutoMalloc log(sizeof(char)*(infoLen+1));  // outside if for debugger
+        SkAutoMalloc log(sizeof(char)*(infoLen+1));  // outside if for debugger
         if (infoLen > 0) {
             GR_GL(GetProgramInfoLog(progID,
                                     infoLen+1,
index d36e21b..207246b 100644 (file)
@@ -17,7 +17,6 @@
 
 #include "GrGLTexture.h"
 #include "GrGpuGL.h"
-#include "GrMemory.h"
 
 #define GPUGL static_cast<GrGpuGL*>(getGpu())
 
@@ -168,7 +167,7 @@ void GrGLTexture::uploadTextureData(int x,
     GrAssert(fUploadFormat != GR_GL_PALETTE8_RGBA8);
 
     // in case we need a temporary, trimmed copy of the src pixels
-    GrAutoSMalloc<128 * 128> trimStorage;
+    SkAutoSMalloc<128 * 128> trimStorage;
 
     /*
      *  check if our srcData has extra bytes past each row. If so, we need
index db7de2c..192d29b 100644 (file)
@@ -15,7 +15,6 @@
  */
 
 #include "GrGpu.h"
-#include "GrMemory.h"
 #include "GrTextStrike.h"
 #include "GrTextureCache.h"
 #include "GrClipIterator.h"
index ffdf496..fe51875 100644 (file)
@@ -15,8 +15,8 @@
  */
 
 #include "GrGpuGL.h"
-#include "GrMemory.h"
 #include "GrTypes.h"
+#include "SkTemplates.h"
 
 static const GrGLuint GR_MAX_GLUINT = ~0;
 static const GrGLint  GR_INVAL_GLINT = ~0;
@@ -312,7 +312,7 @@ GrGpuGL::GrGpuGL() {
 
     GrGLint numFormats;
     GR_GL_GetIntegerv(GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numFormats);
-    GrAutoSTMalloc<10, GrGLint> formats(numFormats);
+    SkAutoSTMalloc<10, GrGLint> formats(numFormats);
     GR_GL_GetIntegerv(GR_GL_COMPRESSED_TEXTURE_FORMATS, formats);
     for (int i = 0; i < numFormats; ++i) {
         if (formats[i] == GR_GL_PALETTE8_RGBA8) {
@@ -780,7 +780,7 @@ GrTexture* GrGpuGL::onCreateTexture(const GrTextureDesc& desc,
     glDesc.fUploadByteCount = GrBytesPerPixel(desc.fFormat);
 
     // in case we need a temporary, trimmed copy of the src pixels
-    GrAutoSMalloc<128 * 128> trimStorage;
+    SkAutoSMalloc<128 * 128> trimStorage;
 
     /*
      *  check if our srcData has extra bytes past each row. If so, we need
@@ -875,7 +875,7 @@ GrTexture* GrGpuGL::onCreateTexture(const GrTextureDesc& desc,
             maxTexels = GrMax(extraW * desc.fHeight, maxTexels);
             maxTexels = GrMax(desc.fWidth * extraH, maxTexels);
 
-            GrAutoSMalloc<128*128> texels(glDesc.fUploadByteCount * maxTexels);
+            SkAutoSMalloc<128*128> texels(glDesc.fUploadByteCount * maxTexels);
 
             uint32_t rowSize = desc.fWidth * glDesc.fUploadByteCount;
             if (extraH) {
@@ -1325,7 +1325,7 @@ bool GrGpuGL::onReadPixels(GrRenderTarget* target,
     // API presents top-to-bottom
     {
         size_t stride = width * GrBytesPerPixel(config);
-        GrAutoMalloc rowStorage(stride);
+        SkAutoMalloc rowStorage(stride);
         void* tmp = rowStorage.get();
 
         const int halfY = height >> 1;
index 0b8aad7..b474be2 100644 (file)
@@ -18,7 +18,6 @@
 #include "GrGLProgram.h"
 #include "GrGpuGLShaders.h"
 #include "GrGpuVertex.h"
-#include "GrMemory.h"
 #include "GrNoncopyable.h"
 #include "GrStringBuilder.h"
 #include "GrRandom.h"
index 3da924a..02ac025 100644 (file)
@@ -15,8 +15,6 @@
  */
 
 
-#include "GrMemory.h"
-
 #include <stdlib.h>
 
 void* GrMalloc(size_t bytes) {
index b565838..1e3c645 100644 (file)
@@ -3,10 +3,11 @@
 #include "GrPoint.h"
 #include "GrDrawTarget.h"
 #include "GrPathUtils.h"
-#include "GrMemory.h"
 #include "GrTexture.h"
 
 #include "SkString.h"
+#include "SkTemplates.h"
+
 #include SK_USER_TRACE_INCLUDE_FILE
 
 GrPathRenderer::GrPathRenderer()
@@ -234,7 +235,7 @@ void GrDefaultPathRenderer::onDrawPath(GrDrawTarget* target,
     GrPoint* vert = base;
     GrPoint* subpathBase = base;
 
-    GrAutoSTMalloc<8, uint16_t> subpathVertCount(subpathCnt);
+    SkAutoSTMalloc<8, uint16_t> subpathVertCount(subpathCnt);
 
     // TODO: use primitve restart if available rather than multiple draws
     GrPrimitiveType             type;
index c1d5ac0..5ddba99 100644 (file)
 
 #include "GrTesselatedPathRenderer.h"
 
-#include "GrMemory.h"
 #include "GrPathUtils.h"
 #include "GrPoint.h"
 #include "GrTDArray.h"
 
+#include "SkTemplates.h"
+
 #include <limits.h>
 #include <sk_glu.h>
 
@@ -393,12 +394,12 @@ void GrTesselatedPathRenderer::drawPath(GrDrawTarget* target,
     if (maxPts > USHRT_MAX) {
         return;
     }
-    GrAutoSTMalloc<8, GrPoint> baseMem(maxPts);
-    GrPoint* base = (GrPoint*) baseMem;
+    SkAutoSTMalloc<8, GrPoint> baseMem(maxPts);
+    GrPoint* base = baseMem;
     GrPoint* vert = base;
     GrPoint* subpathBase = base;
 
-    GrAutoSTMalloc<8, uint16_t> subpathVertCount(subpathCnt);
+    SkAutoSTMalloc<8, uint16_t> subpathVertCount(subpathCnt);
 
     GrPoint pts[4];
     SkPath::Iter iter(path, false);
index 455f88a..c44ad38 100644 (file)
@@ -17,7 +17,6 @@
 
 #include "GrAtlas.h"
 #include "GrGpu.h"
-#include "GrMemory.h"
 #include "GrRectanizer.h"
 #include "GrTextStrike.h"
 #include "GrTextStrike_impl.h"
@@ -189,7 +188,7 @@ bool GrTextStrike::getGlyphAtlas(GrGlyph* glyph, GrFontScaler* scaler) {
 
     int bytesPerPixel = GrMaskFormatBytesPerPixel(fMaskFormat);
     size_t size = glyph->fBounds.area() * bytesPerPixel;
-    GrAutoSMalloc<1024> storage(size);
+    SkAutoSMalloc<1024> storage(size);
     if (!scaler->getPackedGlyphImage(glyph->fPackedID, glyph->width(),
                                      glyph->height(),
                                      glyph->width() * bytesPerPixel,
index ccd3c7d..dc157c5 100644 (file)
         '../gpu/include/GrIPoint.h',
         '../gpu/include/GrKey.h',
         '../gpu/include/GrMatrix.h',
-        '../gpu/include/GrMemory.h',
         '../gpu/include/GrMesh.h',
         '../gpu/include/GrNoncopyable.h',
         '../gpu/include/GrPaint.h',
index 55109bf..996e0b7 100644 (file)
@@ -179,36 +179,88 @@ private:
 */
 template <typename T> class SkAutoTMalloc : SkNoncopyable {
 public:
-    SkAutoTMalloc(size_t count)
-    {
+    SkAutoTMalloc(size_t count) {
         fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
     }
-    ~SkAutoTMalloc()
-    {
+
+    ~SkAutoTMalloc() {
         sk_free(fPtr);
     }
+
+    // doesn't preserve contents
+    void realloc (size_t count) {
+        sk_free(fPtr);
+        fPtr = fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
+    }
+
     T* get() const { return fPtr; }
 
+    operator T*() {
+        return fPtr;
+    }
+
+    operator const T*() const {
+        return fPtr;
+    }
+
+    T& operator[](int index) {
+        return fPtr[index];
+    }
+
+    const T& operator[](int index) const {
+        return fPtr[index];
+    }
+
 private:
     T*  fPtr;
 };
 
 template <size_t N, typename T> class SkAutoSTMalloc : SkNoncopyable {
 public:
-    SkAutoSTMalloc(size_t count)
-    {
-        if (count <= N)
+    SkAutoSTMalloc(size_t count) {
+        if (count <= N) {
             fPtr = fTStorage;
-        else
+        } else {
             fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
+        }
+    }
+
+    ~SkAutoSTMalloc() {
+        if (fPtr != fTStorage) {
+            sk_free(fPtr);
+        }
     }
-    ~SkAutoSTMalloc()
-    {
-        if (fPtr != fTStorage)
+
+    // doesn't preserve contents
+    void realloc (size_t count) {
+        if (fPtr != fTStorage) {
             sk_free(fPtr);
+        }
+        if (count <= N) {
+            fPtr = fTStorage;
+        } else {
+            fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
+        }
     }
+
     T* get() const { return fPtr; }
 
+    operator T*() {
+        return fPtr;
+    }
+
+    operator const T*() const {
+        return fPtr;
+    }
+
+    T& operator[](int index) {
+        return fPtr[index];
+    }
+
+    const T& operator[](int index) const {
+        return fPtr[index];
+    }
+
 private:
     T*          fPtr;
     union {