Extended Inst counting to find "unknown" leaked object (SkTMaskGamma)

http://codereview.appspot.com/6453127/



git-svn-id: http://skia.googlecode.com/svn/trunk@5123 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/views/animated/SkWidgetViews.cpp b/src/views/animated/SkWidgetViews.cpp
index 007a36f..ee03b7b 100644
--- a/src/views/animated/SkWidgetViews.cpp
+++ b/src/views/animated/SkWidgetViews.cpp
@@ -15,79 +15,81 @@
 /*
 I have moved this to SkWidgetViews.h
 enum SkinEnum {
-	kButton_SkinEnum,
-	kProgress_SkinEnum,
-	kScroll_SkinEnum,
-	kStaticText_SkinEnum,
-	
-	kSkinEnumCount
+    kButton_SkinEnum,
+    kProgress_SkinEnum,
+    kScroll_SkinEnum,
+    kStaticText_SkinEnum,
+    
+    kSkinEnumCount
 };
 */
 
+SK_DEFINE_INST_COUNT(SkListSource)
+
 const char* get_skin_enum_path(SkinEnum se)
 {
-	SkASSERT((unsigned)se < kSkinEnumCount);
+    SkASSERT((unsigned)se < kSkinEnumCount);
 
-	static const char* gSkinPaths[] = {
+    static const char* gSkinPaths[] = {
             "common/default/default/skins/border3.xml",
             "common/default/default/skins/button.xml",
             "common/default/default/skins/progressBar.xml",
             "common/default/default/skins/scrollBar.xml",
             "common/default/default/skins/statictextpaint.xml"
-	};
+    };
 
-	return gSkinPaths[se];
+    return gSkinPaths[se];
 }
 
 void init_skin_anim(const char path[], SkAnimator* anim)
 {
-	SkASSERT(path && anim);
+    SkASSERT(path && anim);
 
-	SkFILEStream	stream(path);
+    SkFILEStream	stream(path);
 
-	if (!stream.isValid())
-	{
-		SkDEBUGF(("init_skin_anim: loading skin failed <%s>\n", path));
-		sk_throw();
-	}
+    if (!stream.isValid())
+    {
+        SkDEBUGF(("init_skin_anim: loading skin failed <%s>\n", path));
+        sk_throw();
+    }
 
-	if (!anim->decodeStream(&stream))
-	{
-		SkDEBUGF(("init_skin_anim: decoding skin failed <%s>\n", path));
-		sk_throw();
-	}
+    if (!anim->decodeStream(&stream))
+    {
+        SkDEBUGF(("init_skin_anim: decoding skin failed <%s>\n", path));
+        sk_throw();
+    }
 }
 
 void init_skin_anim(SkinEnum se, SkAnimator* anim)
 {
-	init_skin_anim(get_skin_enum_path(se), anim);
+    init_skin_anim(get_skin_enum_path(se), anim);
 }
 
 void init_skin_paint(SkinEnum se, SkPaint* paint)
 {
-	SkASSERT(paint);
+    SkASSERT(paint);
 
-	SkAnimator	anim;
-	SkCanvas	canvas;
-	
-	init_skin_anim(se, &anim);
-	anim.draw(&canvas, paint, 0);
+    SkAnimator	anim;
+    SkCanvas	canvas;
+    
+    init_skin_anim(se, &anim);
+    anim.draw(&canvas, paint, 0);
 }
 
 void inflate_paint(const SkDOM& dom, const SkDOM::Node* node, SkPaint* paint)
 {
-	SkASSERT(paint);
+    SkASSERT(paint);
 
-	SkAnimator	anim;
-	SkCanvas	canvas;
-	
-	if (!anim.decodeDOM(dom, node))
-	{
-		SkDEBUGF(("inflate_paint: decoding dom failed\n"));
-		SkDEBUGCODE(dom.dump(node);)
-		sk_throw();
-	}	
-	anim.draw(&canvas, paint, 0);
+    SkAnimator	anim;
+    SkCanvas	canvas;
+    
+    if (!anim.decodeDOM(dom, node))
+    {
+        SkDEBUGF(("inflate_paint: decoding dom failed\n"));
+        SkDEBUGCODE(dom.dump(node);)
+        sk_throw();
+    }	
+    anim.draw(&canvas, paint, 0);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
@@ -98,99 +100,99 @@
 
 const char* SkWidgetView::getLabel() const
 {
-	return fLabel.c_str();
+    return fLabel.c_str();
 }
-	
+    
 void SkWidgetView::getLabel(SkString* label) const
 {
-	if (label)
-		*label = fLabel;
+    if (label)
+        *label = fLabel;
 }
 
 void SkWidgetView::setLabel(const char label[])
 {
-	this->setLabel(label, label ? strlen(label) : 0);
+    this->setLabel(label, label ? strlen(label) : 0);
 }
 
 void SkWidgetView::setLabel(const char label[], size_t len)
 {
-	if ((label == NULL && fLabel.size() != 0) || !fLabel.equals(label, len))
-	{
-		SkString	tmp(label, len);
+    if ((label == NULL && fLabel.size() != 0) || !fLabel.equals(label, len))
+    {
+        SkString	tmp(label, len);
 
-		this->onLabelChange(fLabel.c_str(), tmp.c_str());
-		fLabel.swap(tmp);
-	}
+        this->onLabelChange(fLabel.c_str(), tmp.c_str());
+        fLabel.swap(tmp);
+    }
 }
 
 void SkWidgetView::setLabel(const SkString& label)
 {
-	if (fLabel != label)
-	{
-		this->onLabelChange(fLabel.c_str(), label.c_str());
-		fLabel = label;
-	}
+    if (fLabel != label)
+    {
+        this->onLabelChange(fLabel.c_str(), label.c_str());
+        fLabel = label;
+    }
 }
 
 bool SkWidgetView::postWidgetEvent()
 {
-	if (!fEvent.isType(""))
-	{
-		SkEvent	evt(fEvent);	// make a copy since onPrepareWidgetEvent may edit the event
+    if (!fEvent.isType(""))
+    {
+        SkEvent	evt(fEvent);	// make a copy since onPrepareWidgetEvent may edit the event
 
-		if (this->onPrepareWidgetEvent(&evt))
-		{
-			SkDEBUGCODE(evt.dump("SkWidgetView::postWidgetEvent");)
+        if (this->onPrepareWidgetEvent(&evt))
+        {
+            SkDEBUGCODE(evt.dump("SkWidgetView::postWidgetEvent");)
 
-			this->postToListeners(evt);	// wonder if this should return true if there are > 0 listeners...
-			return true;
-		}
-	}
-	return false;
+            this->postToListeners(evt);	// wonder if this should return true if there are > 0 listeners...
+            return true;
+        }
+    }
+    return false;
 }
 
 /*virtual*/ void SkWidgetView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
 {
-	this->INHERITED::onInflate(dom, node);
+    this->INHERITED::onInflate(dom, node);
 
-	const char* label = dom.findAttr(node, "label");
-	if (label)
-		this->setLabel(label);
-		
-	if ((node = dom.getFirstChild(node, "event")) != NULL)
-		fEvent.inflate(dom, node);
+    const char* label = dom.findAttr(node, "label");
+    if (label)
+        this->setLabel(label);
+        
+    if ((node = dom.getFirstChild(node, "event")) != NULL)
+        fEvent.inflate(dom, node);
 }
 
 /*virtual*/ void SkWidgetView::onLabelChange(const char oldLabel[], const char newLabel[])
 {
-	this->inval(NULL);
+    this->inval(NULL);
 }
 
 static const char gWidgetEventSinkIDSlotName[] = "sk-widget-sinkid-slot";
 
 /*virtual*/ bool SkWidgetView::onPrepareWidgetEvent(SkEvent* evt)
 {
-	evt->setS32(gWidgetEventSinkIDSlotName, this->getSinkID());
-	return true;
+    evt->setS32(gWidgetEventSinkIDSlotName, this->getSinkID());
+    return true;
 }
 
 SkEventSinkID SkWidgetView::GetWidgetEventSinkID(const SkEvent& evt)
 {
-	int32_t	sinkID;
-	
-	return evt.findS32(gWidgetEventSinkIDSlotName, &sinkID) ? (SkEventSinkID)sinkID : 0;
+    int32_t	sinkID;
+    
+    return evt.findS32(gWidgetEventSinkIDSlotName, &sinkID) ? (SkEventSinkID)sinkID : 0;
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 /*virtual*/ bool SkButtonView::onEvent(const SkEvent& evt)
 {
-	if (evt.isType(SK_EventType_Key) && evt.getFast32() == kOK_SkKey)
-	{
-		this->postWidgetEvent();
-		return true;
-	}
-	return this->INHERITED::onEvent(evt);
+    if (evt.isType(SK_EventType_Key) && evt.getFast32() == kOK_SkKey)
+    {
+        this->postWidgetEvent();
+        return true;
+    }
+    return this->INHERITED::onEvent(evt);
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -201,50 +203,50 @@
 
 void SkCheckButtonView::setCheckState(CheckState state)
 {
-	SkASSERT((unsigned)state <= kUnknown_CheckState);
-	
-	if (fCheckState != state)
-	{
-		this->onCheckStateChange(this->getCheckState(), state);
-		fCheckState = SkToU8(state);
-	}
+    SkASSERT((unsigned)state <= kUnknown_CheckState);
+    
+    if (fCheckState != state)
+    {
+        this->onCheckStateChange(this->getCheckState(), state);
+        fCheckState = SkToU8(state);
+    }
 }
-	
+    
 /*virtual*/ void SkCheckButtonView::onCheckStateChange(CheckState oldState, CheckState newState)
 {
-	this->inval(NULL);
+    this->inval(NULL);
 }
 
 /*virtual*/ void SkCheckButtonView::onInflate(const SkDOM& dom, const SkDOM::Node* node)
 {
-	this->INHERITED::onInflate(dom, node);
-	
-	int index = dom.findList(node, "check-state", "off,on,unknown");
-	if (index >= 0)
-		this->setCheckState((CheckState)index);
+    this->INHERITED::onInflate(dom, node);
+    
+    int index = dom.findList(node, "check-state", "off,on,unknown");
+    if (index >= 0)
+        this->setCheckState((CheckState)index);
 }
 
 static const char gCheckStateSlotName[] = "sk-checkbutton-check-slot";
 
 /*virtual*/ bool SkCheckButtonView::onPrepareWidgetEvent(SkEvent* evt)
 {
-	// could check if we're "disabled", and return false...
+    // could check if we're "disabled", and return false...
 
-	evt->setS32(gCheckStateSlotName, this->getCheckState());
-	return true;
+    evt->setS32(gCheckStateSlotName, this->getCheckState());
+    return true;
 }
 
 bool SkCheckButtonView::GetWidgetEventCheckState(const SkEvent& evt, CheckState* state)
 {
-	int32_t	state32;
-	
-	if (evt.findS32(gCheckStateSlotName, &state32))
-	{
-		if (state)
-			*state = (CheckState)state32;
-		return true;
-	}
-	return false;
+    int32_t	state32;
+    
+    if (evt.findS32(gCheckStateSlotName, &state32))
+    {
+        if (state)
+            *state = (CheckState)state32;
+        return true;
+    }
+    return false;
 }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -256,93 +258,93 @@
 
 class SkAnimButtonView : public SkButtonView {
 public:
-	SkAnimButtonView()
-	{
-		fAnim.setHostEventSink(this);
-		init_skin_anim(kButton_SkinEnum, &fAnim);
-	}
+    SkAnimButtonView()
+    {
+        fAnim.setHostEventSink(this);
+        init_skin_anim(kButton_SkinEnum, &fAnim);
+    }
 
 protected:
-	virtual void onLabelChange(const char oldLabel[], const char newLabel[])
-	{
-		this->INHERITED::onLabelChange(oldLabel, newLabel);
+    virtual void onLabelChange(const char oldLabel[], const char newLabel[])
+    {
+        this->INHERITED::onLabelChange(oldLabel, newLabel);
 
-		SkEvent evt("user");
-		evt.setString("id", "setLabel");
-		evt.setString("LABEL", newLabel);
-		fAnim.doUserEvent(evt);
-	}
-	
-	virtual void onFocusChange(bool gainFocus)
-	{
-		this->INHERITED::onFocusChange(gainFocus);
+        SkEvent evt("user");
+        evt.setString("id", "setLabel");
+        evt.setString("LABEL", newLabel);
+        fAnim.doUserEvent(evt);
+    }
+    
+    virtual void onFocusChange(bool gainFocus)
+    {
+        this->INHERITED::onFocusChange(gainFocus);
 
-		SkEvent evt("user");
-		evt.setString("id", "setFocus");
-		evt.setS32("FOCUS", gainFocus);
-		fAnim.doUserEvent(evt);
-	}
+        SkEvent evt("user");
+        evt.setString("id", "setFocus");
+        evt.setS32("FOCUS", gainFocus);
+        fAnim.doUserEvent(evt);
+    }
 
-	virtual void onSizeChange()
-	{
-		this->INHERITED::onSizeChange();
+    virtual void onSizeChange()
+    {
+        this->INHERITED::onSizeChange();
 
-		SkEvent evt("user");
-		evt.setString("id", "setDim");
-		evt.setScalar("dimX", this->width());
-		evt.setScalar("dimY", this->height());
-		fAnim.doUserEvent(evt);
-	}
+        SkEvent evt("user");
+        evt.setString("id", "setDim");
+        evt.setScalar("dimX", this->width());
+        evt.setScalar("dimY", this->height());
+        fAnim.doUserEvent(evt);
+    }
 
-	virtual void onDraw(SkCanvas* canvas)
-	{
-		SkPaint						paint;		
-		SkAnimator::DifferenceType	diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs());
-		
-		if (diff == SkAnimator::kDifferent)
-			this->inval(NULL);
-		else if (diff == SkAnimator::kPartiallyDifferent)
-		{
-			SkRect	bounds;
-			fAnim.getInvalBounds(&bounds);
-			this->inval(&bounds);
-		}
-	}
-	
-	virtual bool onEvent(const SkEvent& evt)
-	{
-		if (evt.isType(SK_EventType_Inval))
-		{
-			this->inval(NULL);
-			return true;
-		}
-		if (evt.isType("recommendDim"))
-		{
-			SkScalar	height;
-			
-			if (evt.findScalar("y", &height))
-				this->setHeight(height);
-			return true;
-		}
-		return this->INHERITED::onEvent(evt);
-	}
-	
-	virtual bool onPrepareWidgetEvent(SkEvent* evt)
-	{
-		if (this->INHERITED::onPrepareWidgetEvent(evt))
-		{
-			SkEvent	e("user");
-			e.setString("id", "handlePress");
-			(void)fAnim.doUserEvent(e);
-			return true;
-		}
-		return false;
-	}
+    virtual void onDraw(SkCanvas* canvas)
+    {
+        SkPaint						paint;		
+        SkAnimator::DifferenceType	diff = fAnim.draw(canvas, &paint, SkTime::GetMSecs());
+        
+        if (diff == SkAnimator::kDifferent)
+            this->inval(NULL);
+        else if (diff == SkAnimator::kPartiallyDifferent)
+        {
+            SkRect	bounds;
+            fAnim.getInvalBounds(&bounds);
+            this->inval(&bounds);
+        }
+    }
+    
+    virtual bool onEvent(const SkEvent& evt)
+    {
+        if (evt.isType(SK_EventType_Inval))
+        {
+            this->inval(NULL);
+            return true;
+        }
+        if (evt.isType("recommendDim"))
+        {
+            SkScalar	height;
+            
+            if (evt.findScalar("y", &height))
+                this->setHeight(height);
+            return true;
+        }
+        return this->INHERITED::onEvent(evt);
+    }
+    
+    virtual bool onPrepareWidgetEvent(SkEvent* evt)
+    {
+        if (this->INHERITED::onPrepareWidgetEvent(evt))
+        {
+            SkEvent	e("user");
+            e.setString("id", "handlePress");
+            (void)fAnim.doUserEvent(e);
+            return true;
+        }
+        return false;
+    }
 
 private:
-	SkAnimator	fAnim;
-	
-	typedef SkButtonView INHERITED;
+    SkAnimator	fAnim;
+    
+    typedef SkButtonView INHERITED;
 };
 
 ////////////////////////////////////////////////////////////////////////////////////////////
@@ -350,26 +352,26 @@
 
 SkView* SkWidgetFactory(const char name[])
 {
-	if (name == NULL)
-		return NULL;
-	
-	// must be in the same order as the SkSkinWidgetEnum is declared
-	static const char* gNames[] = {
-		"sk-border",
-		"sk-button",
-		"sk-image",
-		"sk-list",
-		"sk-progress",
-		"sk-scroll",
-		"sk-text"
-		
-	};
+    if (name == NULL)
+        return NULL;
+    
+    // must be in the same order as the SkSkinWidgetEnum is declared
+    static const char* gNames[] = {
+        "sk-border",
+        "sk-button",
+        "sk-image",
+        "sk-list",
+        "sk-progress",
+        "sk-scroll",
+        "sk-text"
+        
+    };
 
-	for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); i++)
-		if (!strcmp(gNames[i], name))
-			return SkWidgetFactory((SkWidgetEnum)i);
+    for (size_t i = 0; i < SK_ARRAY_COUNT(gNames); i++)
+        if (!strcmp(gNames[i], name))
+            return SkWidgetFactory((SkWidgetEnum)i);
 
-	return NULL;
+    return NULL;
 }
 
 #include "SkImageView.h"
@@ -379,24 +381,24 @@
 
 SkView* SkWidgetFactory(SkWidgetEnum sw)
 {
-	switch (sw) {
-	case kBorder_WidgetEnum:
-		return new SkBorderView;
-	case kButton_WidgetEnum:
-		return new SkAnimButtonView;
-	case kImage_WidgetEnum:
-		return new SkImageView;
-	case kList_WidgetEnum:
-		return new SkListView;
-	case kProgress_WidgetEnum:
-		return new SkProgressBarView;
-	case kScroll_WidgetEnum:
-		return new SkScrollBarView;
-	case kText_WidgetEnum:
-		return new SkStaticTextView;
-	default:
-		SkDEBUGFAIL("unknown enum passed to SkWidgetFactory");
-		break;
-	}
-	return NULL;
+    switch (sw) {
+    case kBorder_WidgetEnum:
+        return new SkBorderView;
+    case kButton_WidgetEnum:
+        return new SkAnimButtonView;
+    case kImage_WidgetEnum:
+        return new SkImageView;
+    case kList_WidgetEnum:
+        return new SkListView;
+    case kProgress_WidgetEnum:
+        return new SkProgressBarView;
+    case kScroll_WidgetEnum:
+        return new SkScrollBarView;
+    case kText_WidgetEnum:
+        return new SkStaticTextView;
+    default:
+        SkDEBUGFAIL("unknown enum passed to SkWidgetFactory");
+        break;
+    }
+    return NULL;
 }