Bug 1027496 - Stream display list and layers dump. r=mattwoodrow

This commit is contained in:
Benoit Girard 2014-06-19 18:36:25 -04:00
parent 7acb204216
commit 2c957e7952
33 changed files with 494 additions and 482 deletions

View File

@ -12,52 +12,52 @@
using namespace mozilla::layers;
void
TexturedEffect::PrintInfo(nsACString& aTo, const char* aPrefix)
TexturedEffect::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("%s (0x%p)", Name(), this);
AppendToString(aTo, mTextureCoords, " [texture-coords=", "]");
aStream << aPrefix;
aStream << nsPrintfCString("%s (0x%p)", Name(), this).get();
AppendToString(aStream, mTextureCoords, " [texture-coords=", "]");
if (mPremultiplied) {
aTo += " [premultiplied]";
aStream << " [premultiplied]";
} else {
aTo += " [not-premultiplied]";
aStream << " [not-premultiplied]";
}
AppendToString(aTo, mFilter, " [filter=", "]");
AppendToString(aStream, mFilter, " [filter=", "]");
}
void
EffectMask::PrintInfo(nsACString& aTo, const char* aPrefix)
EffectMask::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("EffectMask (0x%p)", this);
AppendToString(aTo, mSize, " [size=", "]");
AppendToString(aTo, mMaskTransform, " [mask-transform=", "]");
aStream << aPrefix;
aStream << nsPrintfCString("EffectMask (0x%p)", this).get();
AppendToString(aStream, mSize, " [size=", "]");
AppendToString(aStream, mMaskTransform, " [mask-transform=", "]");
if (mIs3D) {
aTo += " [is-3d]";
aStream << " [is-3d]";
}
}
void
EffectRenderTarget::PrintInfo(nsACString& aTo, const char* aPrefix)
EffectRenderTarget::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
TexturedEffect::PrintInfo(aTo, aPrefix);
aTo += nsPrintfCString(" [render-target=%p]", mRenderTarget.get());
TexturedEffect::PrintInfo(aStream, aPrefix);
aStream << nsPrintfCString(" [render-target=%p]", mRenderTarget.get()).get();
}
void
EffectSolidColor::PrintInfo(nsACString& aTo, const char* aPrefix)
EffectSolidColor::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("EffectSolidColor (0x%p) [color=%x]", this, mColor.ToABGR());
aStream << aPrefix;
aStream << nsPrintfCString("EffectSolidColor (0x%p) [color=%x]", this, mColor.ToABGR()).get();
}
void
EffectBlendMode::PrintInfo(nsACString& aTo, const char* aPrefix)
EffectBlendMode::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("EffectBlendMode (0x%p) [blendmode=%i]", this, (int)mBlendMode);
aStream << aPrefix;
aStream << nsPrintfCString("EffectBlendMode (0x%p) [blendmode=%i]", this, (int)mBlendMode).get();
}

View File

@ -46,7 +46,7 @@ struct Effect
EffectTypes mType;
virtual void PrintInfo(nsACString& aTo, const char* aPrefix) = 0;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) = 0;
protected:
virtual ~Effect() {}
@ -67,7 +67,7 @@ struct TexturedEffect : public Effect
{}
virtual const char* Name() = 0;
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
gfx::Rect mTextureCoords;
TextureSource* mTexture;
@ -88,7 +88,7 @@ struct EffectMask : public Effect
, mMaskTransform(aMaskTransform)
{}
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
TextureSource* mMaskTexture;
bool mIs3D;
@ -104,7 +104,7 @@ struct EffectBlendMode : public Effect
{ }
virtual const char* Name() { return "EffectBlendMode"; }
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
gfx::CompositionOp mBlendMode;
};
@ -118,7 +118,7 @@ struct EffectRenderTarget : public TexturedEffect
{}
virtual const char* Name() { return "EffectRenderTarget"; }
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
RefPtr<CompositingRenderTarget> mRenderTarget;
};
@ -167,7 +167,7 @@ struct EffectSolidColor : public Effect
, mColor(aColor)
{}
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
gfx::Color mColor;
};

View File

@ -82,7 +82,7 @@ public:
protected:
ImageLayer(LayerManager* aManager, void* aImplData);
~ImageLayer();
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
nsRefPtr<ImageContainer> mContainer;

View File

@ -1197,11 +1197,11 @@ LayerManager::BeginTabSwitch()
mTabSwitchStart = TimeStamp::Now();
}
static nsACString& PrintInfo(nsACString& aTo, LayerComposite* aLayerComposite);
static void PrintInfo(std::stringstream& aStream, LayerComposite* aLayerComposite);
#ifdef MOZ_DUMP_PAINTING
template <typename T>
void WriteSnapshotLinkToDumpFile(T* aObj, FILE* aFile)
void WriteSnapshotLinkToDumpFile(T* aObj, std::stringstream& aStream)
{
if (!aObj) {
return;
@ -1209,7 +1209,7 @@ void WriteSnapshotLinkToDumpFile(T* aObj, FILE* aFile)
nsCString string(aObj->Name());
string.Append('-');
string.AppendInt((uint64_t)aObj);
fprintf_stderr(aFile, "href=\"javascript:ViewImage('%s')\"", string.BeginReading());
aStream << nsPrintfCString("href=\"javascript:ViewImage('%s')\"", string.BeginReading()).get();
}
template <typename T>
@ -1251,61 +1251,60 @@ void WriteSnapshotToDumpFile(Compositor* aCompositor, DrawTarget* aTarget)
#endif
void
Layer::Dump(FILE* aFile, const char* aPrefix, bool aDumpHtml)
Layer::Dump(std::stringstream& aStream, const char* aPrefix, bool aDumpHtml)
{
if (aDumpHtml) {
fprintf_stderr(aFile, "<li><a id=\"%p\" ", this);
aStream << nsPrintfCString("<li><a id=\"%p\" ", this).get();
#ifdef MOZ_DUMP_PAINTING
if (GetType() == TYPE_CONTAINER || GetType() == TYPE_THEBES) {
WriteSnapshotLinkToDumpFile(this, aFile);
WriteSnapshotLinkToDumpFile(this, aStream);
}
#endif
fprintf_stderr(aFile, ">");
aStream << ">";
}
DumpSelf(aFile, aPrefix);
DumpSelf(aStream, aPrefix);
#ifdef MOZ_DUMP_PAINTING
if (gfxUtils::sDumpPainting && AsLayerComposite() && AsLayerComposite()->GetCompositableHost()) {
AsLayerComposite()->GetCompositableHost()->Dump(aFile, aPrefix, aDumpHtml);
AsLayerComposite()->GetCompositableHost()->Dump(aStream, aPrefix, aDumpHtml);
}
#endif
if (aDumpHtml) {
fprintf_stderr(aFile, "</a>");
aStream << "</a>";
}
if (Layer* mask = GetMaskLayer()) {
fprintf_stderr(aFile, "%s Mask layer:\n", aPrefix);
aStream << nsPrintfCString("%s Mask layer:\n", aPrefix).get();
nsAutoCString pfx(aPrefix);
pfx += " ";
mask->Dump(aFile, pfx.get(), aDumpHtml);
mask->Dump(aStream, pfx.get(), aDumpHtml);
}
if (Layer* kid = GetFirstChild()) {
nsAutoCString pfx(aPrefix);
pfx += " ";
if (aDumpHtml) {
fprintf_stderr(aFile, "<ul>");
aStream << "<ul>";
}
kid->Dump(aFile, pfx.get(), aDumpHtml);
kid->Dump(aStream, pfx.get(), aDumpHtml);
if (aDumpHtml) {
fprintf_stderr(aFile, "</ul>");
aStream << "</ul>";
}
}
if (aDumpHtml) {
fprintf_stderr(aFile, "</li>");
aStream << "</li>";
}
if (Layer* next = GetNextSibling())
next->Dump(aFile, aPrefix, aDumpHtml);
next->Dump(aStream, aPrefix, aDumpHtml);
}
void
Layer::DumpSelf(FILE* aFile, const char* aPrefix)
Layer::DumpSelf(std::stringstream& aStream, const char* aPrefix)
{
nsAutoCString str;
PrintInfo(str, aPrefix);
fprintf_stderr(aFile, "%s\n", str.get());
PrintInfo(aStream, aPrefix);
aStream << "\n";
}
void
@ -1332,9 +1331,9 @@ Layer::LogSelf(const char* aPrefix)
if (!IsLogEnabled())
return;
nsAutoCString str;
PrintInfo(str, aPrefix);
MOZ_LAYERS_LOG(("%s", str.get()));
std::stringstream ss;
PrintInfo(ss, aPrefix);
MOZ_LAYERS_LOG(("%s", ss.str().c_str()));
if (mMaskLayer) {
nsAutoCString pfx(aPrefix);
@ -1343,199 +1342,187 @@ Layer::LogSelf(const char* aPrefix)
}
}
nsACString&
Layer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
Layer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("%s%s (0x%p)", mManager->Name(), Name(), this);
aStream << aPrefix;
aStream << nsPrintfCString("%s%s (0x%p)", mManager->Name(), Name(), this).get();
layers::PrintInfo(aTo, AsLayerComposite());
layers::PrintInfo(aStream, AsLayerComposite());
if (mUseClipRect) {
AppendToString(aTo, mClipRect, " [clip=", "]");
AppendToString(aStream, mClipRect, " [clip=", "]");
}
if (1.0 != mPostXScale || 1.0 != mPostYScale) {
aTo.AppendPrintf(" [postScale=%g, %g]", mPostXScale, mPostYScale);
aStream << nsPrintfCString(" [postScale=%g, %g]", mPostXScale, mPostYScale).get();
}
if (!mTransform.IsIdentity()) {
AppendToString(aTo, mTransform, " [transform=", "]");
AppendToString(aStream, mTransform, " [transform=", "]");
}
if (!mVisibleRegion.IsEmpty()) {
AppendToString(aTo, mVisibleRegion, " [visible=", "]");
AppendToString(aStream, mVisibleRegion, " [visible=", "]");
} else {
aTo += " [not visible]";
aStream << " [not visible]";
}
if (!mEventRegions.mHitRegion.IsEmpty()) {
AppendToString(aTo, mEventRegions.mHitRegion, " [hitregion=", "]");
AppendToString(aStream, mEventRegions.mHitRegion, " [hitregion=", "]");
}
if (!mEventRegions.mDispatchToContentHitRegion.IsEmpty()) {
AppendToString(aTo, mEventRegions.mDispatchToContentHitRegion, " [dispatchtocontentregion=", "]");
AppendToString(aStream, mEventRegions.mDispatchToContentHitRegion, " [dispatchtocontentregion=", "]");
}
if (1.0 != mOpacity) {
aTo.AppendPrintf(" [opacity=%g]", mOpacity);
aStream << nsPrintfCString(" [opacity=%g]", mOpacity).get();
}
if (GetContentFlags() & CONTENT_OPAQUE) {
aTo += " [opaqueContent]";
aStream << " [opaqueContent]";
}
if (GetContentFlags() & CONTENT_COMPONENT_ALPHA) {
aTo += " [componentAlpha]";
aStream << " [componentAlpha]";
}
if (GetScrollbarDirection() == VERTICAL) {
aTo.AppendPrintf(" [vscrollbar=%lld]", GetScrollbarTargetContainerId());
aStream << nsPrintfCString(" [vscrollbar=%lld]", GetScrollbarTargetContainerId()).get();
}
if (GetScrollbarDirection() == HORIZONTAL) {
aTo.AppendPrintf(" [hscrollbar=%lld]", GetScrollbarTargetContainerId());
aStream << nsPrintfCString(" [hscrollbar=%lld]", GetScrollbarTargetContainerId()).get();
}
if (GetIsFixedPosition()) {
aTo.AppendPrintf(" [isFixedPosition anchor=%f,%f margin=%f,%f,%f,%f]", mAnchor.x, mAnchor.y,
mMargins.top, mMargins.right, mMargins.bottom, mMargins.left);
aStream << nsPrintfCString(" [isFixedPosition anchor=%f,%f margin=%f,%f,%f,%f]", mAnchor.x, mAnchor.y,
mMargins.top, mMargins.right, mMargins.bottom, mMargins.left).get();
}
if (GetIsStickyPosition()) {
aTo.AppendPrintf(" [isStickyPosition scrollId=%d outer=%f,%f %fx%f "
aStream << nsPrintfCString(" [isStickyPosition scrollId=%d outer=%f,%f %fx%f "
"inner=%f,%f %fx%f]", mStickyPositionData->mScrollId,
mStickyPositionData->mOuter.x, mStickyPositionData->mOuter.y,
mStickyPositionData->mOuter.width, mStickyPositionData->mOuter.height,
mStickyPositionData->mInner.x, mStickyPositionData->mInner.y,
mStickyPositionData->mInner.width, mStickyPositionData->mInner.height);
mStickyPositionData->mInner.width, mStickyPositionData->mInner.height).get();
}
if (mMaskLayer) {
aTo.AppendPrintf(" [mMaskLayer=%p]", mMaskLayer.get());
aStream << nsPrintfCString(" [mMaskLayer=%p]", mMaskLayer.get()).get();
}
return aTo;
}
nsACString&
ThebesLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ThebesLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
Layer::PrintInfo(aStream, aPrefix);
if (!mValidRegion.IsEmpty()) {
AppendToString(aTo, mValidRegion, " [valid=", "]");
AppendToString(aStream, mValidRegion, " [valid=", "]");
}
return aTo;
}
nsACString&
ContainerLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ContainerLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
Layer::PrintInfo(aStream, aPrefix);
if (!mFrameMetrics.IsDefault()) {
AppendToString(aTo, mFrameMetrics, " [metrics=", "]");
AppendToString(aStream, mFrameMetrics, " [metrics=", "]");
}
if (mScrollHandoffParentId != FrameMetrics::NULL_SCROLL_ID) {
aTo.AppendPrintf(" [scrollParent=%llu]", mScrollHandoffParentId);
aStream << nsPrintfCString(" [scrollParent=%llu]", mScrollHandoffParentId).get();
}
if (UseIntermediateSurface()) {
aTo += " [usesTmpSurf]";
aStream << " [usesTmpSurf]";
}
if (1.0 != mPreXScale || 1.0 != mPreYScale) {
aTo.AppendPrintf(" [preScale=%g, %g]", mPreXScale, mPreYScale);
aStream << nsPrintfCString(" [preScale=%g, %g]", mPreXScale, mPreYScale).get();
}
return aTo;
}
nsACString&
ColorLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ColorLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
AppendToString(aTo, mColor, " [color=", "]");
return aTo;
Layer::PrintInfo(aStream, aPrefix);
AppendToString(aStream, mColor, " [color=", "]");
}
nsACString&
CanvasLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
CanvasLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
Layer::PrintInfo(aStream, aPrefix);
if (mFilter != GraphicsFilter::FILTER_GOOD) {
AppendToString(aTo, mFilter, " [filter=", "]");
AppendToString(aStream, mFilter, " [filter=", "]");
}
return aTo;
}
nsACString&
ImageLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ImageLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
Layer::PrintInfo(aStream, aPrefix);
if (mFilter != GraphicsFilter::FILTER_GOOD) {
AppendToString(aTo, mFilter, " [filter=", "]");
AppendToString(aStream, mFilter, " [filter=", "]");
}
return aTo;
}
nsACString&
RefLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
RefLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
ContainerLayer::PrintInfo(aTo, aPrefix);
ContainerLayer::PrintInfo(aStream, aPrefix);
if (0 != mId) {
AppendToString(aTo, mId, " [id=", "]");
AppendToString(aStream, mId, " [id=", "]");
}
return aTo;
}
nsACString&
ReadbackLayer::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ReadbackLayer::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
Layer::PrintInfo(aTo, aPrefix);
AppendToString(aTo, mSize, " [size=", "]");
Layer::PrintInfo(aStream, aPrefix);
AppendToString(aStream, mSize, " [size=", "]");
if (mBackgroundLayer) {
AppendToString(aTo, mBackgroundLayer, " [backgroundLayer=", "]");
AppendToString(aTo, mBackgroundLayerOffset, " [backgroundOffset=", "]");
AppendToString(aStream, mBackgroundLayer, " [backgroundLayer=", "]");
AppendToString(aStream, mBackgroundLayerOffset, " [backgroundOffset=", "]");
} else if (mBackgroundColor.a == 1.0) {
AppendToString(aTo, mBackgroundColor, " [backgroundColor=", "]");
AppendToString(aStream, mBackgroundColor, " [backgroundColor=", "]");
} else {
aTo += " [nobackground]";
aStream << " [nobackground]";
}
return aTo;
}
//--------------------------------------------------
// LayerManager
void
LayerManager::Dump(FILE* aFile, const char* aPrefix, bool aDumpHtml)
LayerManager::Dump(std::stringstream& aStream, const char* aPrefix, bool aDumpHtml)
{
FILE* file = FILEOrDefault(aFile);
#ifdef MOZ_DUMP_PAINTING
if (aDumpHtml) {
fprintf_stderr(file, "<ul><li><a ");
WriteSnapshotLinkToDumpFile(this, file);
fprintf_stderr(file, ">");
aStream << "<ul><li><a ";
WriteSnapshotLinkToDumpFile(this, aStream);
aStream << ">";
}
#endif
DumpSelf(file, aPrefix);
DumpSelf(aStream, aPrefix);
#ifdef MOZ_DUMP_PAINTING
if (aDumpHtml) {
fprintf_stderr(file, "</a>");
aStream << "</a>";
}
#endif
nsAutoCString pfx(aPrefix);
pfx += " ";
if (!GetRoot()) {
fprintf_stderr(file, "%s(null)", pfx.get());
aStream << nsPrintfCString("%s(null)", pfx.get()).get();
if (aDumpHtml) {
fprintf_stderr(file, "</li></ul>");
aStream << "</li></ul>";
}
return;
}
if (aDumpHtml) {
fprintf_stderr(file, "<ul>");
aStream << "<ul>";
}
GetRoot()->Dump(file, pfx.get(), aDumpHtml);
GetRoot()->Dump(aStream, pfx.get(), aDumpHtml);
if (aDumpHtml) {
fprintf_stderr(file, "</ul></li></ul>");
aStream << "</ul></li></ul>";
}
fprintf_stderr(file, "\n");
aStream << "\n";
}
void
LayerManager::DumpSelf(FILE* aFile, const char* aPrefix)
LayerManager::DumpSelf(std::stringstream& aStream, const char* aPrefix)
{
nsAutoCString str;
PrintInfo(str, aPrefix);
fprintf_stderr(FILEOrDefault(aFile), "%s\n", str.get());
PrintInfo(aStream, aPrefix);
aStream << "\n";
}
void
@ -1560,15 +1547,15 @@ void
LayerManager::LogSelf(const char* aPrefix)
{
nsAutoCString str;
PrintInfo(str, aPrefix);
MOZ_LAYERS_LOG(("%s", str.get()));
std::stringstream ss;
PrintInfo(ss, aPrefix);
MOZ_LAYERS_LOG(("%s", ss.str().c_str()));
}
nsACString&
LayerManager::PrintInfo(nsACString& aTo, const char* aPrefix)
void
LayerManager::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
return aTo += nsPrintfCString("%sLayerManager (0x%p)", Name(), this);
aStream << aPrefix << nsPrintfCString("%sLayerManager (0x%p)", Name(), this).get();
}
/*static*/ void
@ -1586,22 +1573,21 @@ LayerManager::IsLogEnabled()
return PR_LOG_TEST(sLog, PR_LOG_DEBUG);
}
static nsACString&
PrintInfo(nsACString& aTo, LayerComposite* aLayerComposite)
void
PrintInfo(std::stringstream& aStream, LayerComposite* aLayerComposite)
{
if (!aLayerComposite) {
return aTo;
return;
}
if (const nsIntRect* clipRect = aLayerComposite->GetShadowClipRect()) {
AppendToString(aTo, *clipRect, " [shadow-clip=", "]");
AppendToString(aStream, *clipRect, " [shadow-clip=", "]");
}
if (!aLayerComposite->GetShadowTransform().IsIdentity()) {
AppendToString(aTo, aLayerComposite->GetShadowTransform(), " [shadow-transform=", "]");
AppendToString(aStream, aLayerComposite->GetShadowTransform(), " [shadow-transform=", "]");
}
if (!aLayerComposite->GetShadowVisibleRegion().IsEmpty()) {
AppendToString(aTo, aLayerComposite->GetShadowVisibleRegion(), " [shadow-visible=", "]");
AppendToString(aStream, aLayerComposite->GetShadowVisibleRegion(), " [shadow-visible=", "]");
}
return aTo;
}
void

View File

@ -557,14 +557,18 @@ public:
/**
* Dump information about this layer manager and its managed tree to
* aFile, which defaults to stderr.
* aStream.
*/
void Dump(FILE* aFile=nullptr, const char* aPrefix="", bool aDumpHtml=false);
void Dump(std::stringstream& aStream, const char* aPrefix="", bool aDumpHtml=false);
/**
* Dump information about just this layer manager itself to aFile,
* which defaults to stderr.
* Dump information about just this layer manager itself to aStream
*/
void DumpSelf(FILE* aFile=nullptr, const char* aPrefix="");
void DumpSelf(std::stringstream& aStream, const char* aPrefix="");
void Dump() {
std::stringstream ss;
Dump(ss);
printf_stderr("%s", ss.str().c_str());
}
/**
* Log information about this layer manager and its managed tree to
@ -650,9 +654,9 @@ protected:
// Protected destructor, to discourage deletion outside of Release():
virtual ~LayerManager() {}
// Print interesting information about this into aTo. Internally
// Print interesting information about this into aStreamo. Internally
// used to implement Dump*() and Log*().
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
static void InitLog();
static PRLogModuleInfo* sLog;
@ -1327,14 +1331,13 @@ public:
/**
* Dump information about this layer manager and its managed tree to
* aFile, which defaults to stderr.
* aStream.
*/
void Dump(FILE* aFile=nullptr, const char* aPrefix="", bool aDumpHtml=false);
void Dump(std::stringstream& aStream, const char* aPrefix="", bool aDumpHtml=false);
/**
* Dump information about just this layer manager itself to aFile,
* which defaults to stderr.
* Dump information about just this layer manager itself to aStream.
*/
void DumpSelf(FILE* aFile=nullptr, const char* aPrefix="");
void DumpSelf(std::stringstream& aStream, const char* aPrefix="");
/**
* Log information about this layer manager and its managed tree to
@ -1347,12 +1350,12 @@ public:
*/
void LogSelf(const char* aPrefix="");
// Print interesting information about this into aTo. Internally
// used to implement Dump*() and Log*(). If subclasses have
// Print interesting information about this into aStream. Internally
// used to implement Dump*() and Log*(). If subclasses have
// additional interesting properties, they should override this with
// an implementation that first calls the base implementation then
// appends additional info to aTo.
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
static bool IsLogEnabled() { return LayerManager::IsLogEnabled(); }
@ -1586,7 +1589,7 @@ protected:
mContentFlags = 0; // Clear NO_TEXT, NO_TEXT_OVER_TRANSPARENT
}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
/**
* ComputeEffectiveTransforms snaps the ideal transform to get mEffectiveTransform.
@ -1805,7 +1808,7 @@ protected:
*/
void ComputeEffectiveTransformsForChildren(const gfx::Matrix4x4& aTransformToSurface);
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
Layer* mFirstChild;
Layer* mLastChild;
@ -1880,7 +1883,7 @@ protected:
mColor(0.0, 0.0, 0.0, 0.0)
{}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
nsIntRect mBounds;
gfxRGBA mColor;
@ -2039,7 +2042,7 @@ protected:
, mDirty(false)
{}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
void FireDidTransactionCallback()
{
@ -2156,7 +2159,7 @@ protected:
: ContainerLayer(aManager, aImplData) , mId(0)
{}
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
Layer* mTempReferent;
// 0 is a special value that means "no ID".

View File

@ -20,179 +20,182 @@ using namespace mozilla::gfx;
namespace mozilla {
namespace layers {
nsACString&
AppendToString(nsACString& s, const void* p,
void
AppendToString(std::stringstream& aStream, const void* p,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString("%p", p);
return s += sfx;
aStream << pfx;
aStream << nsPrintfCString("%p", p).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const GraphicsFilter& f,
void
AppendToString(std::stringstream& aStream, const GraphicsFilter& f,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
switch (f) {
case GraphicsFilter::FILTER_FAST: s += "fast"; break;
case GraphicsFilter::FILTER_GOOD: s += "good"; break;
case GraphicsFilter::FILTER_BEST: s += "best"; break;
case GraphicsFilter::FILTER_NEAREST: s += "nearest"; break;
case GraphicsFilter::FILTER_BILINEAR: s += "bilinear"; break;
case GraphicsFilter::FILTER_GAUSSIAN: s += "gaussian"; break;
case GraphicsFilter::FILTER_FAST: aStream << "fast"; break;
case GraphicsFilter::FILTER_GOOD: aStream << "good"; break;
case GraphicsFilter::FILTER_BEST: aStream << "best"; break;
case GraphicsFilter::FILTER_NEAREST: aStream << "nearest"; break;
case GraphicsFilter::FILTER_BILINEAR: aStream << "bilinear"; break;
case GraphicsFilter::FILTER_GAUSSIAN: aStream << "gaussian"; break;
default:
NS_ERROR("unknown filter type");
s += "???";
aStream << "???";
}
return s += sfx;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, FrameMetrics::ViewID n,
void
AppendToString(std::stringstream& aStream, FrameMetrics::ViewID n,
const char* pfx, const char* sfx)
{
s += pfx;
s.AppendInt(n);
return s += sfx;
aStream << pfx;
aStream << n;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const gfxRGBA& c,
void
AppendToString(std::stringstream& aStream, const gfxRGBA& c,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString(
aStream << pfx;
aStream << nsPrintfCString(
"rgba(%d, %d, %d, %g)",
uint8_t(c.r*255.0), uint8_t(c.g*255.0), uint8_t(c.b*255.0), c.a);
return s += sfx;
uint8_t(c.r*255.0), uint8_t(c.g*255.0), uint8_t(c.b*255.0), c.a).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntPoint& p,
void
AppendToString(std::stringstream& aStream, const nsIntPoint& p,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString("(x=%d, y=%d)", p.x, p.y);
return s += sfx;
aStream << pfx;
aStream << nsPrintfCString("(x=%d, y=%d)", p.x, p.y).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRect& r,
void
AppendToString(std::stringstream& aStream, const nsIntRect& r,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString(
aStream << pfx;
aStream << nsPrintfCString(
"(x=%d, y=%d, w=%d, h=%d)",
r.x, r.y, r.width, r.height);
return s += sfx;
r.x, r.y, r.width, r.height).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRegion& r,
void
AppendToString(std::stringstream& aStream, const nsIntRegion& r,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
nsIntRegionRectIterator it(r);
s += "< ";
while (const nsIntRect* sr = it.Next())
AppendToString(s, *sr) += "; ";
s += ">";
aStream << "< ";
while (const nsIntRect* sr = it.Next()) {
AppendToString(aStream, *sr);
aStream << "; ";
}
aStream << ">";
return s += sfx;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntSize& sz,
void
AppendToString(std::stringstream& aStream, const nsIntSize& sz,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString("(w=%d, h=%d)", sz.width, sz.height);
return s += sfx;
aStream << pfx;
aStream << nsPrintfCString("(w=%d, h=%d)", sz.width, sz.height).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const FrameMetrics& m,
void
AppendToString(std::stringstream& aStream, const FrameMetrics& m,
const char* pfx, const char* sfx)
{
s += pfx;
AppendToString(s, m.mViewport, "{ viewport=");
AppendToString(s, m.mCompositionBounds, " cb=");
AppendToString(s, m.GetScrollOffset(), " viewportScroll=");
AppendToString(s, m.mDisplayPort, " displayport=");
AppendToString(s, m.mCriticalDisplayPort, " critdp=");
AppendToString(s, m.mScrollableRect, " scrollableRect=");
AppendToString(s, m.GetScrollId(), " scrollId=", " }");
return s += sfx;
aStream << pfx;
AppendToString(aStream, m.mViewport, "{ viewport=");
AppendToString(aStream, m.mCompositionBounds, " cb=");
AppendToString(aStream, m.GetScrollOffset(), " viewportScroll=");
AppendToString(aStream, m.mDisplayPort, " displayport=");
AppendToString(aStream, m.mCriticalDisplayPort, " critdp=");
AppendToString(aStream, m.mScrollableRect, " scrollableRect=");
AppendToString(aStream, m.GetScrollId(), " scrollId=", " }");
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const IntSize& size,
void
AppendToString(std::stringstream& aStream, const IntSize& size,
const char* pfx, const char* sfx)
{
s += pfx;
s += nsPrintfCString(
aStream << pfx;
aStream << nsPrintfCString(
"(width=%d, height=%d)",
size.width, size.height);
return s += sfx;
size.width, size.height).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const Matrix4x4& m,
void
AppendToString(std::stringstream& aStream, const Matrix4x4& m,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
if (m.Is2D()) {
Matrix matrix = m.As2D();
if (matrix.IsIdentity()) {
s += "[ I ]";
return s += sfx;
aStream << "[ I ]";
aStream << sfx;
return;
}
s += nsPrintfCString(
aStream << nsPrintfCString(
"[ %g %g; %g %g; %g %g; ]",
matrix._11, matrix._12, matrix._21, matrix._22, matrix._31, matrix._32);
matrix._11, matrix._12, matrix._21, matrix._22, matrix._31, matrix._32).get();
} else {
s += nsPrintfCString(
aStream << nsPrintfCString(
"[ %g %g %g %g; %g %g %g %g; %g %g %g %g; %g %g %g %g; ]",
m._11, m._12, m._13, m._14,
m._21, m._22, m._23, m._24,
m._31, m._32, m._33, m._34,
m._41, m._42, m._43, m._44);
m._41, m._42, m._43, m._44).get();
}
return s += sfx;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const Filter filter,
void
AppendToString(std::stringstream& aStream, const Filter filter,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
switch (filter) {
case Filter::GOOD: s += "Filter::GOOD"; break;
case Filter::LINEAR: s += "Filter::LINEAR"; break;
case Filter::POINT: s += "Filter::POINT"; break;
case Filter::GOOD: aStream << "Filter::GOOD"; break;
case Filter::LINEAR: aStream << "Filter::LINEAR"; break;
case Filter::POINT: aStream << "Filter::POINT"; break;
}
return s += sfx;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, TextureFlags flags,
void
AppendToString(std::stringstream& aStream, TextureFlags flags,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
if (flags == TextureFlags::NO_FLAGS) {
s += "NoFlags";
aStream << "NoFlags";
} else {
#define AppendFlag(test) \
{ \
if (!!(flags & test)) { \
if (previous) { \
s += "|"; \
aStream << "|"; \
} \
s += #test; \
aStream << #test; \
previous = true; \
} \
}
@ -205,26 +208,26 @@ AppendToString(nsACString& s, TextureFlags flags,
#undef AppendFlag
}
return s += sfx;
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, mozilla::gfx::SurfaceFormat format,
void
AppendToString(std::stringstream& aStream, mozilla::gfx::SurfaceFormat format,
const char* pfx, const char* sfx)
{
s += pfx;
aStream << pfx;
switch (format) {
case SurfaceFormat::B8G8R8A8: s += "SurfaceFormat::B8G8R8A8"; break;
case SurfaceFormat::B8G8R8X8: s += "SurfaceFormat::B8G8R8X8"; break;
case SurfaceFormat::R8G8B8A8: s += "SurfaceFormat::R8G8B8A8"; break;
case SurfaceFormat::R8G8B8X8: s += "SurfaceFormat::R8G8B8X8"; break;
case SurfaceFormat::R5G6B5: s += "SurfaceFormat::R5G6B5"; break;
case SurfaceFormat::A8: s += "SurfaceFormat::A8"; break;
case SurfaceFormat::YUV: s += "SurfaceFormat::YUV"; break;
case SurfaceFormat::UNKNOWN: s += "SurfaceFormat::UNKNOWN"; break;
case SurfaceFormat::B8G8R8A8: aStream << "SurfaceFormat::B8G8R8A8"; break;
case SurfaceFormat::B8G8R8X8: aStream << "SurfaceFormat::B8G8R8X8"; break;
case SurfaceFormat::R8G8B8A8: aStream << "SurfaceFormat::R8G8B8A8"; break;
case SurfaceFormat::R8G8B8X8: aStream << "SurfaceFormat::R8G8B8X8"; break;
case SurfaceFormat::R5G6B5: aStream << "SurfaceFormat::R5G6B5"; break;
case SurfaceFormat::A8: aStream << "SurfaceFormat::A8"; break;
case SurfaceFormat::YUV: aStream << "SurfaceFormat::YUV"; break;
case SurfaceFormat::UNKNOWN: aStream << "SurfaceFormat::UNKNOWN"; break;
}
return s += sfx;
aStream << sfx;
}
} // namespace

View File

@ -29,94 +29,94 @@ template <class units> struct RectTyped;
namespace layers {
nsACString&
AppendToString(nsACString& s, const void* p,
void
AppendToString(std::stringstream& aStream, const void* p,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const GraphicsFilter& f,
void
AppendToString(std::stringstream& aStream, const GraphicsFilter& f,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, FrameMetrics::ViewID n,
void
AppendToString(std::stringstream& aStream, FrameMetrics::ViewID n,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const gfxRGBA& c,
void
AppendToString(std::stringstream& aStream, const gfxRGBA& c,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const nsIntPoint& p,
void
AppendToString(std::stringstream& aStream, const nsIntPoint& p,
const char* pfx="", const char* sfx="");
template<class T>
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::PointTyped<T>& p,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::PointTyped<T>& p,
const char* pfx="", const char* sfx="")
{
s += pfx;
s += nsPrintfCString("(x=%f, y=%f)", p.x, p.y);
return s += sfx;
aStream << pfx;
aStream << nsPrintfCString("(x=%f, y=%f)", p.x, p.y).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRect& r,
void
AppendToString(std::stringstream& aStream, const nsIntRect& r,
const char* pfx="", const char* sfx="");
template<class T>
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::RectTyped<T>& r,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::RectTyped<T>& r,
const char* pfx="", const char* sfx="")
{
s += pfx;
s.AppendPrintf(
aStream << pfx;
aStream << nsPrintfCString(
"(x=%f, y=%f, w=%f, h=%f)",
r.x, r.y, r.width, r.height);
return s += sfx;
r.x, r.y, r.width, r.height).get();
aStream << sfx;
}
template<class T>
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::IntRectTyped<T>& r,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::IntRectTyped<T>& r,
const char* pfx="", const char* sfx="")
{
s += pfx;
s.AppendPrintf(
aStream << pfx;
aStream << nsPrintfCString(
"(x=%d, y=%d, w=%d, h=%d)",
r.x, r.y, r.width, r.height);
return s += sfx;
r.x, r.y, r.width, r.height).get();
aStream << sfx;
}
nsACString&
AppendToString(nsACString& s, const nsIntRegion& r,
void
AppendToString(std::stringstream& aStream, const nsIntRegion& r,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const nsIntSize& sz,
void
AppendToString(std::stringstream& aStream, const nsIntSize& sz,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const FrameMetrics& m,
void
AppendToString(std::stringstream& aStream, const FrameMetrics& m,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::IntSize& size,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::IntSize& size,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::Matrix4x4& m,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::Matrix4x4& m,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, const mozilla::gfx::Filter filter,
void
AppendToString(std::stringstream& aStream, const mozilla::gfx::Filter filter,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, mozilla::layers::TextureFlags flags,
void
AppendToString(std::stringstream& aStream, mozilla::layers::TextureFlags flags,
const char* pfx="", const char* sfx="");
nsACString&
AppendToString(nsACString& s, mozilla::gfx::SurfaceFormat format,
void
AppendToString(std::stringstream& aStream, mozilla::gfx::SurfaceFormat format,
const char* pfx="", const char* sfx="");
} // namespace

View File

@ -170,9 +170,7 @@ protected:
mBackgroundColor(gfxRGBA(0,0,0,0))
{}
// Print interesting information about this into aTo. Internally
// used to implement Dump*() and Log*().
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
uint64_t mSequenceCounter;
nsAutoPtr<ReadbackSink> mSink;

View File

@ -34,8 +34,10 @@ namespace layers {
# define TILING_PRLOG(_args) PR_LOG(gTilingLog, PR_LOG_DEBUG, _args)
# define TILING_PRLOG_OBJ(_args, obj) \
{ \
std::stringstream ss; \
AppendToString(ss, obj); \
nsAutoCString tmpstr; \
AppendToString(tmpstr, obj); \
tmpstr = ss.str().c_str(); \
PR_LOG(gTilingLog, PR_LOG_DEBUG, _args); \
}
extern PRLogModuleInfo* gTilingLog;

View File

@ -132,17 +132,16 @@ CanvasLayerComposite::CleanupResources()
mImageHost = nullptr;
}
nsACString&
CanvasLayerComposite::PrintInfo(nsACString& aTo, const char* aPrefix)
void
CanvasLayerComposite::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
CanvasLayer::PrintInfo(aTo, aPrefix);
aTo += "\n";
CanvasLayer::PrintInfo(aStream, aPrefix);
aStream << "\n";
if (mImageHost && mImageHost->IsAttached()) {
nsAutoCString pfx(aPrefix);
pfx += " ";
mImageHost->PrintInfo(aTo, pfx.get());
mImageHost->PrintInfo(aStream, pfx.get());
}
return aTo;
}
}

View File

@ -61,7 +61,7 @@ public:
virtual const char* Name() const MOZ_OVERRIDE { return "CanvasLayerComposite"; }
protected:
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix) MOZ_OVERRIDE;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) MOZ_OVERRIDE;
private:
RefPtr<CompositableHost> mImageHost;

View File

@ -213,7 +213,7 @@ CompositableHost::Create(const TextureInfo& aTextureInfo)
#ifdef MOZ_DUMP_PAINTING
void
CompositableHost::DumpTextureHost(FILE* aFile, TextureHost* aTexture)
CompositableHost::DumpTextureHost(std::stringstream& aStream, TextureHost* aTexture)
{
if (!aTexture) {
return;
@ -231,7 +231,8 @@ CompositableHost::DumpTextureHost(FILE* aFile, TextureHost* aTexture)
if (!surf) {
return;
}
surf->DumpAsDataURL(aFile ? aFile : stderr);
// TODO stream surface
surf->DumpAsDataURL(stderr);
}
#endif

View File

@ -250,15 +250,15 @@ public:
bool IsAttached() { return mAttached; }
#ifdef MOZ_DUMP_PAINTING
virtual void Dump(FILE* aFile=nullptr,
virtual void Dump(std::stringstream& aStream,
const char* aPrefix="",
bool aDumpHtml=false) { }
static void DumpTextureHost(FILE* aFile, TextureHost* aTexture);
static void DumpTextureHost(std::stringstream& aStream, TextureHost* aTexture);
virtual TemporaryRef<gfx::DataSourceSurface> GetAsSurface() { return nullptr; }
#endif
virtual void PrintInfo(nsACString& aTo, const char* aPrefix) = 0;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) = 0;
virtual void UseTextureHost(TextureHost* aTexture);
virtual void UseComponentAlphaTextures(TextureHost* aTextureOnBlack,

View File

@ -124,15 +124,15 @@ static void DrawLayerInfo(const nsIntRect& aClipRect,
return;
}
nsAutoCString layerInfo;
aLayer->PrintInfo(layerInfo, "");
std::stringstream ss;
aLayer->PrintInfo(ss, "");
nsIntRegion visibleRegion = aLayer->GetVisibleRegion();
uint32_t maxWidth = std::min<uint32_t>(visibleRegion.GetBounds().width, 500);
nsIntPoint topLeft = visibleRegion.GetBounds().TopLeft();
aManager->GetTextRenderer()->RenderText(layerInfo.get(), gfx::IntPoint(topLeft.x, topLeft.y),
aManager->GetTextRenderer()->RenderText(ss.str().c_str(), gfx::IntPoint(topLeft.x, topLeft.y),
aLayer->GetEffectiveTransform(), 16,
maxWidth);

View File

@ -261,30 +261,27 @@ ContentHostTexture::SetCompositor(Compositor* aCompositor)
#ifdef MOZ_DUMP_PAINTING
void
ContentHostTexture::Dump(FILE* aFile,
ContentHostTexture::Dump(std::stringstream& aStream,
const char* aPrefix,
bool aDumpHtml)
{
if (!aDumpHtml) {
return;
}
if (!aFile) {
aFile = stderr;
}
fprintf(aFile, "<ul>");
aStream << "<ul>";
if (mTextureHost) {
fprintf(aFile, "%s", aPrefix);
fprintf(aFile, "<li> <a href=");
DumpTextureHost(aFile, mTextureHost);
fprintf(aFile, "> Front buffer </a></li> ");
aStream << aPrefix;
aStream << "<li> <a href=";
DumpTextureHost(aStream, mTextureHost);
aStream << "> Front buffer </a></li> ";
}
if (mTextureHostOnWhite) {
fprintf(aFile, "%s", aPrefix);
fprintf(aFile, "<li> <a href=");
DumpTextureHost(aFile, mTextureHostOnWhite);
fprintf(aFile, "> Front buffer on white </a> </li> ");
aStream << aPrefix;
aStream << "<li> <a href=";
DumpTextureHost(aStream, mTextureHostOnWhite);
aStream << "> Front buffer on white </a> </li> ";
}
fprintf(aFile, "</ul>");
aStream << "</ul>";
}
#endif
@ -652,34 +649,34 @@ ContentHostIncremental::TextureUpdateRequest::Execute(ContentHostIncremental* aH
}
void
ContentHostIncremental::PrintInfo(nsACString& aTo, const char* aPrefix)
ContentHostIncremental::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("ContentHostIncremental (0x%p)", this);
aStream << aPrefix;
aStream << nsPrintfCString("ContentHostIncremental (0x%p)", this).get();
if (PaintWillResample()) {
aTo += " [paint-will-resample]";
aStream << " [paint-will-resample]";
}
}
void
ContentHostTexture::PrintInfo(nsACString& aTo, const char* aPrefix)
ContentHostTexture::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("ContentHost (0x%p)", this);
aStream << aPrefix;
aStream << nsPrintfCString("ContentHost (0x%p)", this).get();
AppendToString(aTo, mBufferRect, " [buffer-rect=", "]");
AppendToString(aTo, mBufferRotation, " [buffer-rotation=", "]");
AppendToString(aStream, mBufferRect, " [buffer-rect=", "]");
AppendToString(aStream, mBufferRotation, " [buffer-rotation=", "]");
if (PaintWillResample()) {
aTo += " [paint-will-resample]";
aStream << " [paint-will-resample]";
}
if (mTextureHost) {
nsAutoCString pfx(aPrefix);
pfx += " ";
aTo += "\n";
mTextureHost->PrintInfo(aTo, pfx.get());
aStream << "\n";
mTextureHost->PrintInfo(aStream, pfx.get());
}
}

View File

@ -139,12 +139,12 @@ public:
#ifdef MOZ_DUMP_PAINTING
virtual TemporaryRef<gfx::DataSourceSurface> GetAsSurface() MOZ_OVERRIDE;
virtual void Dump(FILE* aFile=nullptr,
virtual void Dump(std::stringstream& aStream,
const char* aPrefix="",
bool aDumpHtml=false) MOZ_OVERRIDE;
#endif
virtual void PrintInfo(nsACString& aTo, const char* aPrefix) MOZ_OVERRIDE;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) MOZ_OVERRIDE;
virtual void UseTextureHost(TextureHost* aTexture) MOZ_OVERRIDE;
virtual void UseComponentAlphaTextures(TextureHost* aTextureOnBlack,
@ -279,7 +279,7 @@ public:
return false;
}
virtual void PrintInfo(nsACString& aTo, const char* aPrefix) MOZ_OVERRIDE;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) MOZ_OVERRIDE;
virtual bool Lock() {
MOZ_ASSERT(!mLocked);

View File

@ -195,36 +195,33 @@ ImageHost::SetCompositor(Compositor* aCompositor)
}
void
ImageHost::PrintInfo(nsACString& aTo, const char* aPrefix)
ImageHost::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("ImageHost (0x%p)", this);
aStream << aPrefix;
aStream << nsPrintfCString("ImageHost (0x%p)", this).get();
AppendToString(aTo, mPictureRect, " [picture-rect=", "]");
AppendToString(aStream, mPictureRect, " [picture-rect=", "]");
if (mFrontBuffer) {
nsAutoCString pfx(aPrefix);
pfx += " ";
aTo += "\n";
mFrontBuffer->PrintInfo(aTo, pfx.get());
aStream << "\n";
mFrontBuffer->PrintInfo(aStream, pfx.get());
}
}
#ifdef MOZ_DUMP_PAINTING
void
ImageHost::Dump(FILE* aFile,
ImageHost::Dump(std::stringstream& aStream,
const char* aPrefix,
bool aDumpHtml)
{
if (!aFile) {
aFile = stderr;
}
if (mFrontBuffer) {
fprintf_stderr(aFile, "%s", aPrefix);
fprintf_stderr(aFile, aDumpHtml ? "<ul><li>TextureHost: "
aStream << aPrefix;
aStream << (aDumpHtml ? "<ul><li>TextureHost: "
: "TextureHost: ");
DumpTextureHost(aFile, mFrontBuffer);
fprintf_stderr(aFile, aDumpHtml ? " </li></ul> " : " ");
DumpTextureHost(aStream, mFrontBuffer);
aStream << (aDumpHtml ? " </li></ul> " : " ");
}
}
#endif

View File

@ -69,10 +69,10 @@ public:
virtual LayerRenderState GetRenderState() MOZ_OVERRIDE;
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
#ifdef MOZ_DUMP_PAINTING
virtual void Dump(FILE* aFile = nullptr,
virtual void Dump(std::stringstream& aStream,
const char* aPrefix = "",
bool aDumpHtml = false) MOZ_OVERRIDE;

View File

@ -161,17 +161,16 @@ ImageLayerComposite::CleanupResources()
mImageHost = nullptr;
}
nsACString&
ImageLayerComposite::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ImageLayerComposite::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
ImageLayer::PrintInfo(aTo, aPrefix);
ImageLayer::PrintInfo(aStream, aPrefix);
if (mImageHost && mImageHost->IsAttached()) {
aTo += "\n";
aStream << "\n";
nsAutoCString pfx(aPrefix);
pfx += " ";
mImageHost->PrintInfo(aTo, pfx.get());
mImageHost->PrintInfo(aStream, pfx.get());
}
return aTo;
}
} /* layers */

View File

@ -56,7 +56,7 @@ public:
virtual const char* Name() const { return "ImageLayerComposite"; }
protected:
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix) MOZ_OVERRIDE;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) MOZ_OVERRIDE;
private:
RefPtr<CompositableHost> mImageHost;

View File

@ -305,18 +305,18 @@ void TextureHost::Finalize()
}
void
TextureHost::PrintInfo(nsACString& aTo, const char* aPrefix)
TextureHost::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("%s (0x%p)", Name(), this);
aStream << aPrefix;
aStream << nsPrintfCString("%s (0x%p)", Name(), this).get();
// Note: the TextureHost needs to be locked before it is safe to call
// GetSize() and GetFormat() on it.
if (Lock()) {
AppendToString(aTo, GetSize(), " [size=", "]");
AppendToString(aTo, GetFormat(), " [format=", "]");
AppendToString(aStream, GetSize(), " [size=", "]");
AppendToString(aStream, GetFormat(), " [format=", "]");
Unlock();
}
AppendToString(aTo, mFlags, " [flags=", "]");
AppendToString(aStream, mFlags, " [flags=", "]");
}
void

View File

@ -446,7 +446,7 @@ public:
virtual void ForgetBufferActor() {}
virtual const char *Name() { return "TextureHost"; }
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
/**
* Indicates whether the TextureHost implementation is backed by an

View File

@ -193,17 +193,16 @@ ThebesLayerComposite::GetEffectiveResolution()
return CSSToScreenScale(1.0);
}
nsACString&
ThebesLayerComposite::PrintInfo(nsACString& aTo, const char* aPrefix)
void
ThebesLayerComposite::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
ThebesLayer::PrintInfo(aTo, aPrefix);
ThebesLayer::PrintInfo(aStream, aPrefix);
if (mBuffer && mBuffer->IsAttached()) {
aTo += "\n";
aStream << "\n";
nsAutoCString pfx(aPrefix);
pfx += " ";
mBuffer->PrintInfo(aTo, pfx.get());
mBuffer->PrintInfo(aStream, pfx.get());
}
return aTo;
}
} /* layers */

View File

@ -78,7 +78,7 @@ public:
protected:
virtual nsACString& PrintInfo(nsACString& aTo, const char* aPrefix) MOZ_OVERRIDE;
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix) MOZ_OVERRIDE;
private:
CSSToScreenScale GetEffectiveResolution();

View File

@ -478,40 +478,36 @@ TiledContentHost::RenderLayerBuffer(TiledLayerBufferComposite& aLayerBuffer,
}
void
TiledContentHost::PrintInfo(nsACString& aTo, const char* aPrefix)
TiledContentHost::PrintInfo(std::stringstream& aStream, const char* aPrefix)
{
aTo += aPrefix;
aTo += nsPrintfCString("TiledContentHost (0x%p)", this);
aStream << aPrefix;
aStream << nsPrintfCString("TiledContentHost (0x%p)", this).get();
}
#ifdef MOZ_DUMP_PAINTING
void
TiledContentHost::Dump(FILE* aFile,
TiledContentHost::Dump(std::stringstream& aStream,
const char* aPrefix,
bool aDumpHtml)
{
if (!aFile) {
aFile = stderr;
}
TiledLayerBufferComposite::Iterator it = mTiledBuffer.TilesBegin();
TiledLayerBufferComposite::Iterator stop = mTiledBuffer.TilesEnd();
if (aDumpHtml) {
fprintf_stderr(aFile, "<ul>");
aStream << "<ul>";
}
for (;it != stop; ++it) {
fprintf_stderr(aFile, "%s", aPrefix);
fprintf_stderr(aFile, aDumpHtml ? "<li> <a href=" : "Tile ");
aStream << aPrefix;
aStream << (aDumpHtml ? "<li> <a href=" : "Tile ");
if (it->IsPlaceholderTile()) {
fprintf_stderr(aFile, "empty tile");
aStream << "empty tile";
} else {
DumpTextureHost(aFile, it->mTextureHost);
DumpTextureHost(aStream, it->mTextureHost);
}
fprintf_stderr(aFile, aDumpHtml ? " >Tile</a></li>" : " ");
aStream << (aDumpHtml ? " >Tile</a></li>" : " ");
}
if (aDumpHtml) {
fprintf_stderr(aFile, "</ul>");
if (aDumpHtml) {
aStream << "</ul>";
}
}
#endif

View File

@ -228,12 +228,12 @@ public:
AttachFlags aFlags = NO_FLAGS) MOZ_OVERRIDE;
#ifdef MOZ_DUMP_PAINTING
virtual void Dump(FILE* aFile=nullptr,
virtual void Dump(std::stringstream& aStream,
const char* aPrefix="",
bool aDumpHtml=false) MOZ_OVERRIDE;
#endif
virtual void PrintInfo(nsACString& aTo, const char* aPrefix);
virtual void PrintInfo(std::stringstream& aStream, const char* aPrefix);
#if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17
/**

View File

@ -11,6 +11,7 @@
#include "imgIContainer.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/RefPtr.h"
#include "nsPrintfCString.h"
class gfxDrawable;
class nsIntRegion;

View File

@ -3910,9 +3910,9 @@ FrameLayerBuilder::CheckDOMModified()
#ifdef MOZ_DUMP_PAINTING
/* static */ void
FrameLayerBuilder::DumpRetainedLayerTree(LayerManager* aManager, FILE* aFile, bool aDumpHtml)
FrameLayerBuilder::DumpRetainedLayerTree(LayerManager* aManager, std::stringstream& aStream, bool aDumpHtml)
{
aManager->Dump(aFile, "", aDumpHtml);
aManager->Dump(aStream, "", aDumpHtml);
}
#endif

View File

@ -263,7 +263,7 @@ public:
* Dumps this FrameLayerBuilder's retained layer manager's retained
* layer tree. Defaults to dumping to stdout in non-HTML format.
*/
static void DumpRetainedLayerTree(LayerManager* aManager, FILE* aFile = stdout, bool aDumpHtml = false);
static void DumpRetainedLayerTree(LayerManager* aManager, std::stringstream& aStream, bool aDumpHtml = false);
#endif
/******* PRIVATE METHODS to FrameLayerBuilder.cpp ********/

View File

@ -5273,7 +5273,9 @@ nsDisplayTransform::WriteDebugInfo(nsACString& aTo)
{
gfx::Matrix4x4 transform;
gfx::ToMatrix4x4(GetTransform(), transform);
AppendToString(aTo, transform);
std::stringstream ss;
AppendToString(ss, transform);
aTo += ss.str().c_str();
}
#endif

View File

@ -121,18 +121,24 @@ nsLayoutDebugger::GetStyleSize(nsIPresShell* aPresentation,
#endif
#ifdef MOZ_DUMP_PAINTING
std::ostream& operator<<(std::ostream& os, const nsPrintfCString& rhs) {
os << rhs.get();
return os;
}
static void
PrintDisplayListTo(nsDisplayListBuilder* aBuilder, const nsDisplayList& aList,
FILE* aOutput, uint32_t aIndent, bool aDumpHtml);
std::stringstream& aStream, uint32_t aIndent, bool aDumpHtml);
static void
PrintDisplayItemTo(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem,
FILE* aOutput, uint32_t aIndent, bool aDumpSublist, bool aDumpHtml)
std::stringstream& aStream, uint32_t aIndent, bool aDumpSublist, bool aDumpHtml)
{
nsCString str;
std::stringstream ss;
if (!aDumpHtml) {
for (uint32_t indent = 0; indent < aIndent; indent++) {
str += " ";
aStream << " ";
}
}
nsIFrame* f = aItem->Frame();
@ -155,9 +161,9 @@ PrintDisplayItemTo(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem,
nsCString string(aItem->Name());
string.Append('-');
string.AppendInt((uint64_t)aItem);
str += nsPrintfCString("<a href=\"javascript:ViewImage('%s')\">", string.BeginReading());
aStream << nsPrintfCString("<a href=\"javascript:ViewImage('%s')\">", string.BeginReading());
}
str += nsPrintfCString("%s %p(%s) bounds(%d,%d,%d,%d) visible(%d,%d,%d,%d) componentAlpha(%d,%d,%d,%d) clip(%s) %s",
aStream << nsPrintfCString("%s %p(%s) bounds(%d,%d,%d,%d) visible(%d,%d,%d,%d) componentAlpha(%d,%d,%d,%d) clip(%s) %s",
aItem->Name(), (void*)f, NS_ConvertUTF16toUTF8(fName).get(),
rect.x, rect.y, rect.width, rect.height,
vis.x, vis.y, vis.width, vis.height,
@ -167,120 +173,125 @@ PrintDisplayItemTo(nsDisplayListBuilder* aBuilder, nsDisplayItem* aItem,
nsRegionRectIterator iter(opaque);
for (const nsRect* r = iter.Next(); r; r = iter.Next()) {
str += nsPrintfCString(" (opaque %d,%d,%d,%d)", r->x, r->y, r->width, r->height);
aStream << nsPrintfCString(" (opaque %d,%d,%d,%d)", r->x, r->y, r->width, r->height);
}
if (aItem->Frame()->StyleDisplay()->mWillChange.Length() > 0) {
str += nsPrintfCString(" (will-change=");
aStream << " (will-change=";
for (size_t i = 0; i < aItem->Frame()->StyleDisplay()->mWillChange.Length(); i++) {
if (i > 0) {
str += ",";
aStream << ",";
}
str += NS_LossyConvertUTF16toASCII(aItem->Frame()->StyleDisplay()->mWillChange[i]);
aStream << NS_LossyConvertUTF16toASCII(aItem->Frame()->StyleDisplay()->mWillChange[i]).get();
}
str += nsPrintfCString(")");
aStream << ")";
}
// Display item specific debug info
aItem->WriteDebugInfo(str);
nsCString itemStr;
aItem->WriteDebugInfo(itemStr);
aStream << itemStr.get();
if (aDumpHtml && aItem->Painted()) {
str += "</a>";
aStream << "</a>";
}
uint32_t key = aItem->GetPerFrameKey();
Layer* layer = mozilla::FrameLayerBuilder::GetDebugOldLayerFor(f, key);
if (layer) {
if (aDumpHtml) {
str += nsPrintfCString(" <a href=\"#%p\">layer=%p</a>", layer, layer);
aStream << nsPrintfCString(" <a href=\"#%p\">layer=%p</a>", layer, layer);
} else {
str += nsPrintfCString(" layer=%p", layer);
aStream << nsPrintfCString(" layer=%p", layer);
}
}
if (aItem->GetType() == nsDisplayItem::TYPE_SVG_EFFECTS) {
nsCString str;
(static_cast<nsDisplaySVGEffects*>(aItem))->PrintEffects(str);
aStream << str.get();
}
fprintf_stderr(aOutput, "%s\n", str.get());
aStream << "\n";
if (aDumpSublist && list) {
PrintDisplayListTo(aBuilder, *list, aOutput, aIndent+1, aDumpHtml);
PrintDisplayListTo(aBuilder, *list, aStream, aIndent+1, aDumpHtml);
}
}
static void
PrintDisplayListTo(nsDisplayListBuilder* aBuilder, const nsDisplayList& aList,
FILE* aOutput, uint32_t aIndent, bool aDumpHtml)
std::stringstream& aStream, uint32_t aIndent, bool aDumpHtml)
{
if (aDumpHtml) {
fprintf_stderr(aOutput, "<ul>");
aStream << "<ul>";
}
for (nsDisplayItem* i = aList.GetBottom(); i != nullptr; i = i->GetAbove()) {
if (aDumpHtml) {
fprintf_stderr(aOutput, "<li>");
aStream << "<li>";
}
PrintDisplayItemTo(aBuilder, i, aOutput, aIndent, true, aDumpHtml);
PrintDisplayItemTo(aBuilder, i, aStream, aIndent, true, aDumpHtml);
if (aDumpHtml) {
fprintf_stderr(aOutput, "</li>");
aStream << "</li>";
}
}
if (aDumpHtml) {
fprintf_stderr(aOutput, "</ul>");
aStream << "</ul>";
}
}
void
nsFrame::PrintDisplayItem(nsDisplayListBuilder* aBuilder,
nsDisplayItem* aItem,
FILE* aFile,
std::stringstream& aStream,
bool aDumpSublist,
bool aDumpHtml)
{
PrintDisplayItemTo(aBuilder, aItem, aFile, 0, aDumpSublist, aDumpHtml);
PrintDisplayItemTo(aBuilder, aItem, aStream, 0, aDumpSublist, aDumpHtml);
}
void
nsFrame::PrintDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayList& aList,
FILE* aFile,
std::stringstream& aStream,
bool aDumpHtml)
{
PrintDisplayListTo(aBuilder, aList, aFile, 0, aDumpHtml);
PrintDisplayListTo(aBuilder, aList, aStream, 0, aDumpHtml);
}
static void
PrintDisplayListSetItem(nsDisplayListBuilder* aBuilder,
const char* aItemName,
const nsDisplayList& aList,
FILE* aFile,
std::stringstream& aStream,
bool aDumpHtml)
{
if (aDumpHtml) {
fprintf_stderr(aFile, "<li>");
aStream << "<li>";
}
fprintf_stderr(aFile, "%s", aItemName);
PrintDisplayListTo(aBuilder, aList, aFile, 0, aDumpHtml);
aStream << aItemName;
PrintDisplayListTo(aBuilder, aList, aStream, 0, aDumpHtml);
if (aDumpHtml) {
fprintf_stderr(aFile, "</li>");
aStream << "</li>";
}
}
void
nsFrame::PrintDisplayListSet(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aSet,
FILE *aFile,
std::stringstream& aStream,
bool aDumpHtml)
{
if (aDumpHtml) {
fprintf_stderr(aFile, "<ul>");
aStream << "<ul>";
}
PrintDisplayListSetItem(aBuilder, "[BorderBackground]", *(aSet.BorderBackground()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[BlockBorderBackgrounds]", *(aSet.BlockBorderBackgrounds()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Floats]", *(aSet.Floats()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[PositionedDescendants]", *(aSet.PositionedDescendants()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Outlines]", *(aSet.Outlines()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Content]", *(aSet.Content()), aFile, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[BorderBackground]", *(aSet.BorderBackground()), aStream, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[BlockBorderBackgrounds]", *(aSet.BlockBorderBackgrounds()), aStream, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Floats]", *(aSet.Floats()), aStream, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[PositionedDescendants]", *(aSet.PositionedDescendants()), aStream, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Outlines]", *(aSet.Outlines()), aStream, aDumpHtml);
PrintDisplayListSetItem(aBuilder, "[Content]", *(aSet.Content()), aStream, aDumpHtml);
if (aDumpHtml) {
fprintf_stderr(aFile, "</ul>");
aStream << "</ul>";
}
}

View File

@ -2620,7 +2620,10 @@ nsLayoutUtils::GetFramesForArea(nsIFrame* aFrame, const nsRect& aRect,
#ifdef MOZ_DUMP_PAINTING
if (gDumpEventList) {
fprintf_stderr(stderr, "Event handling --- (%d,%d):\n", aRect.x, aRect.y);
nsFrame::PrintDisplayList(&builder, list);
std::stringstream ss;
nsFrame::PrintDisplayList(&builder, list, ss);
fprintf_stderr(stderr, "%s", ss.str().c_str());
}
#endif
@ -2924,6 +2927,8 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
#ifdef MOZ_DUMP_PAINTING
FILE* savedDumpFile = gfxUtils::sDumpPaintFile;
std::stringstream ss;
if (gfxUtils::DumpPaintList() || gfxUtils::sDumpPainting) {
if (gfxUtils::sDumpPaintingToFile) {
nsCString string("dump-");
@ -2934,13 +2939,13 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
gfxUtils::sDumpPaintFile = stderr;
}
if (gfxUtils::sDumpPaintingToFile) {
fprintf_stderr(gfxUtils::sDumpPaintFile, "<html><head><script>var array = {}; function ViewImage(index) { window.location = array[index]; }</script></head><body>");
ss << "<html><head><script>var array = {}; function ViewImage(index) { window.location = array[index]; }</script></head><body>";
}
fprintf_stderr(gfxUtils::sDumpPaintFile, "Painting --- before optimization (dirty %d,%d,%d,%d):\n",
dirtyRect.x, dirtyRect.y, dirtyRect.width, dirtyRect.height);
nsFrame::PrintDisplayList(&builder, list, gfxUtils::sDumpPaintFile, gfxUtils::sDumpPaintingToFile);
ss << nsPrintfCString("Painting --- before optimization (dirty %d,%d,%d,%d):\n",
dirtyRect.x, dirtyRect.y, dirtyRect.width, dirtyRect.height).get();
nsFrame::PrintDisplayList(&builder, list, ss, gfxUtils::sDumpPaintingToFile);
if (gfxUtils::sDumpPaintingToFile) {
fprintf_stderr(gfxUtils::sDumpPaintFile, "<script>");
ss << "<script>";
}
}
#endif
@ -2985,22 +2990,27 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
#ifdef MOZ_DUMP_PAINTING
if (gfxUtils::DumpPaintList() || gfxUtils::sDumpPainting) {
if (gfxUtils::sDumpPaintingToFile) {
fprintf_stderr(gfxUtils::sDumpPaintFile, "</script>");
ss << "</script>";
}
fprintf_stderr(gfxUtils::sDumpPaintFile, "Painting --- after optimization:\n");
nsFrame::PrintDisplayList(&builder, list, gfxUtils::sDumpPaintFile, gfxUtils::sDumpPaintingToFile);
ss << "Painting --- after optimization:\n";
nsFrame::PrintDisplayList(&builder, list, ss, gfxUtils::sDumpPaintingToFile);
fprintf_stderr(gfxUtils::sDumpPaintFile, "Painting --- retained layer tree:\n");
ss << "Painting --- retained layer tree:\n";
nsIWidget* widget = aFrame->GetNearestWidget();
if (widget) {
nsRefPtr<LayerManager> layerManager = widget->GetLayerManager();
if (layerManager) {
FrameLayerBuilder::DumpRetainedLayerTree(layerManager, gfxUtils::sDumpPaintFile,
FrameLayerBuilder::DumpRetainedLayerTree(layerManager, ss,
gfxUtils::sDumpPaintingToFile);
}
}
if (gfxUtils::sDumpPaintingToFile) {
fprintf(gfxUtils::sDumpPaintFile, "</body></html>");
ss << "</body></html>";
}
fprintf(gfxUtils::sDumpPaintFile, "%s", ss.str().c_str());
if (gfxUtils::sDumpPaintingToFile) {
fclose(gfxUtils::sDumpPaintFile);
}
gfxUtils::sDumpPaintFile = savedDumpFile;

View File

@ -706,17 +706,25 @@ public:
static void PrintDisplayItem(nsDisplayListBuilder* aBuilder,
nsDisplayItem* aItem,
FILE* aFile = stdout,
std::stringstream& aStream,
bool aDumpSublist = false,
bool aDumpHtml = false);
static void PrintDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayList& aList,
FILE* aFile = stdout,
bool aDumpHtml = false)
{
std::stringstream ss;
PrintDisplayList(aBuilder, aList, ss, aDumpHtml);
fprintf_stderr(stderr, "%s", ss.str().c_str());
}
static void PrintDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayList& aList,
std::stringstream& aStream,
bool aDumpHtml = false);
static void PrintDisplayListSet(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aList,
FILE* aFile = stdout,
std::stringstream& aStream,
bool aDumpHtml = false);
#endif