OSDN Git Service

improve hwc dumpsys
authorMathias Agopian <mathias@google.com>
Tue, 20 Sep 2011 22:13:14 +0000 (15:13 -0700)
committerMathias Agopian <mathias@google.com>
Wed, 21 Sep 2011 00:57:15 +0000 (17:57 -0700)
we now log the buffer's format

Change-Id: I9d3ad8018e884240a153de3baefb6331cb014d0f

services/surfaceflinger/DisplayHardware/HWComposer.cpp
services/surfaceflinger/Layer.h
services/surfaceflinger/LayerBase.h
services/surfaceflinger/SurfaceFlinger.cpp

index c9567d5..daefd5e 100644 (file)
@@ -143,18 +143,29 @@ void HWComposer::dump(String8& result, char* buffer, size_t SIZE,
         snprintf(buffer, SIZE, "  numHwLayers=%u, flags=%08x\n",
                 mList->numHwLayers, mList->flags);
         result.append(buffer);
-
+        result.append(
+                "    type   |   hints  |   flags  | tr | blend |  format  |     source rectangle      |      crop rectangle       name \n"
+                "-----------+----------+----------+----+-------+----------+---------------------------+--------------------------------\n");
+        //      "  ________ | ________ | ________ | __ | _____ | ________ | [_____,_____,_____,_____] | [_____,_____,_____,_____]
         for (size_t i=0 ; i<mList->numHwLayers ; i++) {
             const hwc_layer_t& l(mList->hwLayers[i]);
-            snprintf(buffer, SIZE, "  %8s | %08x | %08x | %02x | %04x | [%5d,%5d,%5d,%5d] |  [%5d,%5d,%5d,%5d] %s\n",
+            const sp<LayerBase> layer(visibleLayersSortedByZ[i]);
+            int32_t format = -1;
+            if (layer->getLayer() != NULL) {
+                const sp<GraphicBuffer>& buffer(layer->getLayer()->getActiveBuffer());
+                if (buffer != NULL) {
+                    format = buffer->getPixelFormat();
+                }
+            }
+            snprintf(buffer, SIZE,
+                    "  %8s | %08x | %08x | %02x | %05x | %08x | [%5d,%5d,%5d,%5d] | [%5d,%5d,%5d,%5d] %s\n",
                     l.compositionType ? "OVERLAY" : "FB",
-                    l.hints, l.flags, l.transform, l.blending,
+                    l.hints, l.flags, l.transform, l.blending, format,
                     l.sourceCrop.left, l.sourceCrop.top, l.sourceCrop.right, l.sourceCrop.bottom,
                     l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
-                    visibleLayersSortedByZ[i]->getName().string());
+                    layer->getName().string());
             result.append(buffer);
         }
-
     }
     if (mHwc && mHwc->common.version >= 1 && mHwc->dump) {
         mHwc->dump(mHwc, buffer, SIZE);
index d06a35f..ff389ae 100644 (file)
@@ -73,12 +73,14 @@ public:
     virtual bool isSecure() const           { return mSecure; }
     virtual bool isProtected() const;
     virtual void onRemoved();
+    virtual sp<Layer> getLayer() const { return const_cast<Layer*>(this); }
 
     // LayerBaseClient interface
     virtual wp<IBinder> getSurfaceTextureBinder() const;
 
     // only for debugging
     inline const sp<FreezeLock>&  getFreezeLock() const { return mFreezeLock; }
+    inline const sp<GraphicBuffer>& getActiveBuffer() const { return mActiveBuffer; }
 
 protected:
     virtual void onFirstRef();
index ee50428..a14b397 100644 (file)
@@ -46,6 +46,7 @@ class Client;
 class DisplayHardware;
 class GraphicBuffer;
 class GraphicPlane;
+class Layer;
 class LayerBaseClient;
 class SurfaceFlinger;
 
@@ -105,6 +106,7 @@ public:
             void invalidate();
 
     virtual sp<LayerBaseClient> getLayerBaseClient() const { return 0; }
+    virtual sp<Layer> getLayer() const { return 0; }
 
     virtual const char* getTypeId() const { return "LayerBase"; }
 
index df13640..431cd1a 100644 (file)
@@ -925,7 +925,7 @@ Region SurfaceFlinger::setupHardwareComposer(const Region& dirty)
             // what's happening here is tricky.
             // we want to clear all the layers with the CLEAR_FB flags
             // that are opaque.
-            // however, since some GPU have are efficient at preserving
+            // however, since some GPU are efficient at preserving
             // the backbuffer, we want to take advantage of that so we do the
             // clear only in the dirty region (other areas will be preserved
             // on those GPUs).