diff --git a/libs/hwui/GenerationCache.h b/libs/hwui/GenerationCache.h
index e215daf..56693da 100644
--- a/libs/hwui/GenerationCache.h
+++ b/libs/hwui/GenerationCache.h
@@ -33,7 +33,7 @@
 template<typename K, typename V>
 class GenerationCache {
 public:
-    GenerationCache(unsigned int maxCapacity): mMaxCapacity(maxCapacity), mListener(NULL) { };
+    GenerationCache(uint32_t maxCapacity): mMaxCapacity(maxCapacity), mListener(NULL) { };
     ~GenerationCache() { clear(); };
 
     enum Capacity {
@@ -50,7 +50,7 @@
     V* remove(K* key);
     void removeOldest();
 
-    unsigned int size() const;
+    uint32_t size() const;
 
 private:
     template<typename EntryKey, typename EntryValue>
@@ -72,7 +72,7 @@
     void attachToCache(sp<Entry<K*, V*> > entry);
     void detachFromCache(sp<Entry<K*, V*> > entry);
 
-    unsigned int mMaxCapacity;
+    uint32_t mMaxCapacity;
 
     OnEntryRemoved<K*, V*>* mListener;
 
@@ -83,7 +83,7 @@
 }; // class GenerationCache
 
 template<typename K, typename V>
-unsigned int GenerationCache<K, V>::size() const {
+uint32_t GenerationCache<K, V>::size() const {
     return mCache.size();
 }
 
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 095d58b..9df1c67 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -411,8 +411,6 @@
 
 void OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, const SkPaint* paint) {
     const Texture* texture = mTextureCache.get(bitmap);
-    LOGD("Texture cache size %d", mTextureCache.getSize());
-    LOGD("          max size %d", mTextureCache.getMaxSize());
 
     int alpha;
     SkXfermode::Mode mode;
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index 6802c59..d37013d 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -41,11 +41,11 @@
     /**
      * Width of the backing bitmap.
      */
-    unsigned int width;
+    uint32_t width;
     /**
      * Height of the backing bitmap.
      */
-    unsigned int height;
+    uint32_t height;
 }; // struct Texture
 
 }; // namespace uirenderer
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 10e4f9e..93ee138 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -27,7 +27,7 @@
 // Constructors/destructor
 ///////////////////////////////////////////////////////////////////////////////
 
-TextureCache::TextureCache(unsigned int maxByteSize):
+TextureCache::TextureCache(uint32_t maxByteSize):
         mCache(GenerationCache<SkBitmap, Texture>::kUnlimitedCapacity),
         mSize(0), mMaxSize(maxByteSize) {
     mCache.setOnEntryRemovedListener(this);
@@ -41,15 +41,15 @@
 // Size management
 ///////////////////////////////////////////////////////////////////////////////
 
-unsigned int TextureCache::getSize() {
+uint32_t TextureCache::getSize() {
     return mSize;
 }
 
-unsigned int TextureCache::getMaxSize() {
+uint32_t TextureCache::getMaxSize() {
     return mMaxSize;
 }
 
-void TextureCache::setMaxSize(unsigned int maxSize) {
+void TextureCache::setMaxSize(uint32_t maxSize) {
     mMaxSize = maxSize;
     while (mSize > mMaxSize) {
         mCache.removeOldest();
@@ -62,7 +62,7 @@
 
 void TextureCache::operator()(SkBitmap* bitmap, Texture* texture) {
     if (bitmap) {
-        const unsigned int size = bitmap->rowBytes() * bitmap->height();
+        const uint32_t size = bitmap->rowBytes() * bitmap->height();
         mSize -= size;
     }
 
@@ -79,7 +79,7 @@
 Texture* TextureCache::get(SkBitmap* bitmap) {
     Texture* texture = mCache.get(bitmap);
     if (!texture) {
-        const unsigned int size = bitmap->rowBytes() * bitmap->height();
+        const uint32_t size = bitmap->rowBytes() * bitmap->height();
         // Don't even try to cache a bitmap that's bigger than the cache
         if (size < mMaxSize) {
             while (mSize + size > mMaxSize) {
diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h
index c974b65..250efc5 100644
--- a/libs/hwui/TextureCache.h
+++ b/libs/hwui/TextureCache.h
@@ -32,7 +32,7 @@
  */
 class TextureCache: public OnEntryRemoved<SkBitmap*, Texture*> {
 public:
-    TextureCache(unsigned int maxByteSize);
+    TextureCache(uint32_t maxByteSize);
     ~TextureCache();
 
     /**
@@ -59,15 +59,15 @@
     /**
      * Sets the maximum size of the cache in bytes.
      */
-    void setMaxSize(unsigned int maxSize);
+    void setMaxSize(uint32_t maxSize);
     /**
      * Returns the maximum size of the cache in bytes.
      */
-    unsigned int getMaxSize();
+    uint32_t getMaxSize();
     /**
      * Returns the current size of the cache in bytes.
      */
-    unsigned int getSize();
+    uint32_t getSize();
 
 private:
     /**
@@ -80,8 +80,8 @@
 
     GenerationCache<SkBitmap, Texture> mCache;
 
-    unsigned int mSize;
-    unsigned int mMaxSize;
+    uint32_t mSize;
+    uint32_t mMaxSize;
 }; // class TextureCache
 
 }; // namespace uirenderer
