Bug 1061393 - Export display list info to layer scope viewer. r=kamidphish

This commit is contained in:
CJ Ku 2015-08-03 02:11:00 -04:00
parent 16f658e270
commit 0c07d120c9
16 changed files with 588 additions and 31 deletions

View File

@ -191,6 +191,8 @@ public:
gfx::Matrix4x4 mMVMatrix;
size_t mRects;
gfx::Rect mLayerRects[4];
gfx::Rect mTextureRects[4];
std::list<GLuint> mTexIDs;
};
class ContentMonitor {
@ -289,6 +291,18 @@ public:
return *mSession;
}
void SetPixelScale(double scale) {
mScale = scale;
}
double GetPixelScale() const {
return mScale;
}
LayerScopeManager()
: mScale(1.0)
{
}
private:
friend class CreateServerSocketRunnable;
class CreateServerSocketRunnable : public nsRunnable
@ -310,6 +324,7 @@ private:
mozilla::UniquePtr<LayerScopeWebSocketManager> mWebSocketManager;
mozilla::UniquePtr<DrawSession> mSession;
mozilla::UniquePtr<ContentMonitor> mContentMonitor;
double mScale;
};
LayerScopeManager gLayerScopeManager;
@ -367,6 +382,8 @@ public:
FramePacket* fp = packet.mutable_frame();
fp->set_value(static_cast<uint64_t>(mFrameStamp));
fp->set_scale(gLayerScopeManager.GetPixelScale());
return WriteToStream(packet);
}
@ -623,16 +640,20 @@ public:
const gfx::Matrix4x4& aMVMatrix,
size_t aRects,
const gfx::Rect* aLayerRects,
const gfx::Rect* aTextureRects,
const std::list<GLuint> aTexIDs,
void* aLayerRef)
: DebugGLData(Packet::DRAW),
mOffsetX(aOffsetX),
mOffsetY(aOffsetY),
mMVMatrix(aMVMatrix),
mRects(aRects),
mTexIDs(aTexIDs),
mLayerRef(reinterpret_cast<uint64_t>(aLayerRef))
{
for (size_t i = 0; i < mRects; i++){
mLayerRects[i] = aLayerRects[i];
mTextureRects[i] = aTextureRects[i];
}
}
@ -654,11 +675,23 @@ public:
MOZ_ASSERT(mRects > 0 && mRects < 4);
for (size_t i = 0; i < mRects; i++) {
// Vertex
layerscope::DrawPacket::Rect* pRect = dp->add_layerrect();
pRect->set_x(mLayerRects[i].x);
pRect->set_y(mLayerRects[i].y);
pRect->set_w(mLayerRects[i].width);
pRect->set_h(mLayerRects[i].height);
// UV
pRect = dp->add_texturerect();
pRect->set_x(mTextureRects[i].x);
pRect->set_y(mTextureRects[i].y);
pRect->set_w(mTextureRects[i].width);
pRect->set_h(mTextureRects[i].height);
}
for (GLuint texId: mTexIDs) {
dp->add_texids(texId);
}
return WriteToStream(packet);
@ -670,6 +703,8 @@ protected:
gfx::Matrix4x4 mMVMatrix;
size_t mRects;
gfx::Rect mLayerRects[4];
gfx::Rect mTextureRects[4];
std::list<GLuint> mTexIDs;
uint64_t mLayerRef;
};
@ -955,6 +990,8 @@ SenderHelper::SendTextureSource(GLContext* aGLContext,
aTexID, img));
sTextureIdList.push_back(aTexID);
gLayerScopeManager.CurrentSession().mTexIDs.push_back(aTexID);
}
#ifdef MOZ_WIDGET_GONK
@ -983,6 +1020,8 @@ SenderHelper::SendGraphicBuffer(void* aLayerRef,
gLayerScopeManager.GetSocketManager()->AppendDebugData(package.release());
sTextureIdList.push_back(aTexID);
gLayerScopeManager.CurrentSession().mTexIDs.push_back(aTexID);
gLayerScopeManager.GetContentMonitor()->ClearChangedHost(aEffect->mState.mTexture);
return true;
}
@ -1585,7 +1624,8 @@ LayerScope::DrawBegin()
gLayerScopeManager.NewDrawSession();
}
void LayerScope::SetRenderOffset(float aX, float aY)
void
LayerScope::SetRenderOffset(float aX, float aY)
{
if (!CheckSendable()) {
return;
@ -1595,7 +1635,8 @@ void LayerScope::SetRenderOffset(float aX, float aY)
gLayerScopeManager.CurrentSession().mOffsetY = aY;
}
void LayerScope::SetLayerTransform(const gfx::Matrix4x4& aMatrix)
void
LayerScope::SetLayerTransform(const gfx::Matrix4x4& aMatrix)
{
if (!CheckSendable()) {
return;
@ -1604,7 +1645,10 @@ void LayerScope::SetLayerTransform(const gfx::Matrix4x4& aMatrix)
gLayerScopeManager.CurrentSession().mMVMatrix = aMatrix;
}
void LayerScope::SetLayerRects(size_t aRects, const gfx::Rect* aLayerRects)
void
LayerScope::SetDrawRects(size_t aRects,
const gfx::Rect* aLayerRects,
const gfx::Rect* aTextureRects)
{
if (!CheckSendable()) {
return;
@ -1617,6 +1661,7 @@ void LayerScope::SetLayerRects(size_t aRects, const gfx::Rect* aLayerRects)
for (size_t i = 0; i < aRects; i++){
gLayerScopeManager.CurrentSession().mLayerRects[i] = aLayerRects[i];
gLayerScopeManager.CurrentSession().mTextureRects[i] = aTextureRects[i];
}
}
@ -1631,17 +1676,20 @@ LayerScope::DrawEnd(gl::GLContext* aGLContext,
return;
}
// 1. Send parameters of draw call, such as uniforms and attributes of
// 1. Send textures.
SenderHelper::SendEffectChain(aGLContext, aEffectChain, aWidth, aHeight);
// 2. Send parameters of draw call, such as uniforms and attributes of
// vertex adnd fragment shader.
DrawSession& draws = gLayerScopeManager.CurrentSession();
gLayerScopeManager.GetSocketManager()->AppendDebugData(
new DebugGLDrawData(draws.mOffsetX, draws.mOffsetY,
draws.mMVMatrix, draws.mRects,
draws.mLayerRects,
draws.mTextureRects,
draws.mTexIDs,
aEffectChain.mLayerRef));
// 2. Send textures.
SenderHelper::SendEffectChain(aGLContext, aEffectChain, aWidth, aHeight);
}
void
@ -1703,6 +1751,11 @@ LayerScope::SetHWComposed()
}
}
void
LayerScope::SetPixelScale(double devPixelsPerCSSPixel)
{
gLayerScopeManager.SetPixelScale(devPixelsPerCSSPixel);
}
// ----------------------------------------------
// LayerScopeAutoFrame implementation
// ----------------------------------------------
@ -1721,11 +1774,10 @@ LayerScopeAutoFrame::~LayerScopeAutoFrame()
void
LayerScopeAutoFrame::BeginFrame(int64_t aFrameStamp)
{
SenderHelper::ClearTextureIdList();
if (!LayerScope::CheckSendable()) {
return;
}
SenderHelper::ClearTextureIdList();
gLayerScopeManager.GetSocketManager()->AppendDebugData(
new DebugGLFrameStatusData(Packet::FRAMESTART, aFrameStamp));

View File

@ -26,7 +26,9 @@ public:
static void DrawBegin();
static void SetRenderOffset(float aX, float aY);
static void SetLayerTransform(const gfx::Matrix4x4& aMatrix);
static void SetLayerRects(size_t aRects, const gfx::Rect* aLayerRects);
static void SetDrawRects(size_t aRects,
const gfx::Rect* aLayerRects,
const gfx::Rect* aTextureRects);
static void DrawEnd(gl::GLContext* aGLContext,
const EffectChain& aEffectChain,
int aWidth,
@ -40,6 +42,7 @@ public:
static void CleanLayer();
static void SetHWComposed();
static void SetPixelScale(double devPixelsPerCSSPixel);
static void ContentChanged(TextureHost *host);
private:
static void Init();

View File

@ -36,6 +36,7 @@
#include "nsPrintfCString.h" // for nsPrintfCString
#include "nsStyleStruct.h" // for nsTimingFunction, etc
#include "protobuf/LayerScopePacket.pb.h"
#include "mozilla/Compression.h"
uint8_t gLayerManagerLayerBuilder;
@ -51,6 +52,7 @@ FILEOrDefault(FILE* aFile)
typedef FrameMetrics::ViewID ViewID;
using namespace mozilla::gfx;
using namespace mozilla::Compression;
//--------------------------------------------------
// LayerManager
@ -1591,6 +1593,35 @@ Layer::Dump(layerscope::LayersPacket* aPacket, const void* aParent)
}
}
void
Layer::SetDisplayListLog(const char* log)
{
if (gfxUtils::DumpDisplayList()) {
mDisplayListLog = log;
}
}
void
Layer::GetDisplayListLog(nsCString& log)
{
log.SetLength(0);
if (gfxUtils::DumpDisplayList()) {
// This function returns a plain text string which consists of two things
// 1. DisplayList log.
// 2. Memory address of this layer.
// We know the target layer of each display item by information in #1.
// Here is an example of a Text display item line log in #1
// Text p=0xa9850c00 f=0x0xaa405b00(.....
// f keeps the address of the target client layer of a display item.
// For LayerScope, display-item-to-client-layer mapping is not enough since
// LayerScope, which lives in the chrome process, knows only composite layers.
// As so, we need display-item-to-client-layer-to-layer-composite
// mapping. That's the reason we insert #2 into the log
log.AppendPrintf("0x%p\n%s",(void*) this, mDisplayListLog.get());
}
}
void
Layer::Log(const char* aPrefix)
{
@ -1807,10 +1838,22 @@ Layer::DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent)
LayersPacket::Layer::HORIZONTAL);
layer->set_barid(GetScrollbarTargetContainerId());
}
// Mask layer
if (mMaskLayer) {
layer->set_mask(reinterpret_cast<uint64_t>(mMaskLayer.get()));
}
// DisplayList log.
if (mDisplayListLog.Length() > 0) {
layer->set_displaylistloglength(mDisplayListLog.Length());
auto compressedData =
MakeUnique<char[]>(LZ4::maxCompressedSize(mDisplayListLog.Length()));
int compressedSize = LZ4::compress((char*)mDisplayListLog.get(),
mDisplayListLog.Length(),
compressedData.get());
layer->set_displaylistlog(compressedData.get(), compressedSize);
}
}
void

View File

@ -1583,6 +1583,16 @@ public:
// instead of a StringStream. It is also internally used to implement Dump();
virtual void DumpPacket(layerscope::LayersPacket* aPacket, const void* aParent);
/**
* Store display list log.
*/
void SetDisplayListLog(const char *log);
/**
* Return display list log.
*/
void GetDisplayListLog(nsCString& log);
static bool IsLogEnabled() { return LayerManager::IsLogEnabled(); }
/**
@ -1785,6 +1795,8 @@ protected:
#ifdef MOZ_DUMP_PAINTING
nsTArray<nsCString> mExtraDumpInfo;
#endif
// Store display list log.
nsCString mDisplayListLog;
};
/**

View File

@ -75,6 +75,8 @@
#include "GeckoTouchDispatcher.h"
#endif
#include "LayerScope.h"
namespace mozilla {
namespace layers {
@ -681,6 +683,8 @@ CompositorParent::CompositorParent(nsIWidget* aWidget,
}
gfxPlatform::GetPlatform()->ComputeTileSize();
LayerScope::SetPixelScale(mWidget->GetDefaultScale().scale);
}
bool

View File

@ -347,6 +347,7 @@ LayerTransactionParent::RecvUpdate(InfallibleTArray<Edit>&& cset,
layer->SetAnimations(common.animations());
layer->SetInvalidRegion(common.invalidRegion());
layer->SetFrameMetrics(common.metrics());
layer->SetDisplayListLog(common.displayListLog().get());
nsTArray<nsRefPtr<Layer>> maskLayers;
for (size_t i = 0; i < common.ancestorMaskLayersParent().Length(); i++) {

View File

@ -233,6 +233,7 @@ struct CommonLayerAttributes {
nsIntRegion invalidRegion;
FrameMetrics[] metrics;
string contentDescription;
nsCString displayListLog;
};
struct PaintedLayerAttributes {

View File

@ -613,6 +613,10 @@ ShadowLayerForwarder::EndTransaction(InfallibleTArray<EditReply>* aReplies,
auto layer = Shadow(mutant->GetAncestorMaskLayerAt(i)->AsShadowableLayer());
common.ancestorMaskLayersChild().AppendElement(layer);
}
nsCString log;
mutant->GetDisplayListLog(log);
common.displayListLog() = log;
attrs.specific() = null_t();
mutant->FillSpecificAttributes(attrs.specific());

View File

@ -1627,7 +1627,7 @@ CompositorOGL::BindAndDrawQuads(ShaderProgramOGL *aProg,
// We are using GL_TRIANGLES here because the Mac Intel drivers fail to properly
// process uniform arrays with GL_TRIANGLE_STRIP. Go figure.
mGLContext->fDrawArrays(LOCAL_GL_TRIANGLES, 0, 6 * aQuads);
LayerScope::SetLayerRects(aQuads, aLayerRects);
LayerScope::SetDrawRects(aQuads, aLayerRects, aTextureRects);
}
GLBlitTextureImageHelper*

View File

@ -99,6 +99,7 @@ struct StaticDescriptorInitializer_LayerScopePacket_2eproto {
#ifndef _MSC_VER
const int FramePacket::kValueFieldNumber;
const int FramePacket::kScaleFieldNumber;
#endif // !_MSC_VER
FramePacket::FramePacket()
@ -120,6 +121,7 @@ FramePacket::FramePacket(const FramePacket& from)
void FramePacket::SharedCtor() {
_cached_size_ = 0;
value_ = GOOGLE_ULONGLONG(0);
scale_ = 0;
::memset(_has_bits_, 0, sizeof(_has_bits_));
}
@ -158,7 +160,21 @@ FramePacket* FramePacket::New() const {
}
void FramePacket::Clear() {
value_ = GOOGLE_ULONGLONG(0);
#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>( \
&reinterpret_cast<FramePacket*>(16)->f) - \
reinterpret_cast<char*>(16))
#define ZR_(first, last) do { \
size_t f = OFFSET_OF_FIELD_(first); \
size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last); \
::memset(&first, 0, n); \
} while (0)
ZR_(value_, scale_);
#undef OFFSET_OF_FIELD_
#undef ZR_
::memset(_has_bits_, 0, sizeof(_has_bits_));
mutable_unknown_fields()->clear();
}
@ -187,6 +203,21 @@ bool FramePacket::MergePartialFromCodedStream(
} else {
goto handle_unusual;
}
if (input->ExpectTag(21)) goto parse_scale;
break;
}
// optional float scale = 2;
case 2: {
if (tag == 21) {
parse_scale:
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
input, &scale_)));
set_has_scale();
} else {
goto handle_unusual;
}
if (input->ExpectAtEnd()) goto success;
break;
}
@ -221,6 +252,11 @@ void FramePacket::SerializeWithCachedSizes(
::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->value(), output);
}
// optional float scale = 2;
if (has_scale()) {
::google::protobuf::internal::WireFormatLite::WriteFloat(2, this->scale(), output);
}
output->WriteRaw(unknown_fields().data(),
unknown_fields().size());
// @@protoc_insertion_point(serialize_end:mozilla.layers.layerscope.FramePacket)
@ -237,6 +273,11 @@ int FramePacket::ByteSize() const {
this->value());
}
// optional float scale = 2;
if (has_scale()) {
total_size += 1 + 4;
}
}
total_size += unknown_fields().size();
@ -257,6 +298,9 @@ void FramePacket::MergeFrom(const FramePacket& from) {
if (from.has_value()) {
set_value(from.value());
}
if (from.has_scale()) {
set_scale(from.scale());
}
}
mutable_unknown_fields()->append(from.unknown_fields());
}
@ -275,6 +319,7 @@ bool FramePacket::IsInitialized() const {
void FramePacket::Swap(FramePacket* other) {
if (other != this) {
std::swap(value_, other->value_);
std::swap(scale_, other->scale_);
std::swap(_has_bits_[0], other->_has_bits_[0]);
_unknown_fields_.swap(other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
@ -2459,6 +2504,8 @@ const int LayersPacket_Layer::kColorFieldNumber;
const int LayersPacket_Layer::kFilterFieldNumber;
const int LayersPacket_Layer::kRefIDFieldNumber;
const int LayersPacket_Layer::kSizeFieldNumber;
const int LayersPacket_Layer::kDisplayListLogLengthFieldNumber;
const int LayersPacket_Layer::kDisplayListLogFieldNumber;
#endif // !_MSC_VER
LayersPacket_Layer::LayersPacket_Layer()
@ -2544,6 +2591,7 @@ LayersPacket_Layer::LayersPacket_Layer(const LayersPacket_Layer& from)
}
void LayersPacket_Layer::SharedCtor() {
::google::protobuf::internal::GetEmptyString();
_cached_size_ = 0;
type_ = 0;
ptr_ = GOOGLE_ULONGLONG(0);
@ -2568,6 +2616,8 @@ void LayersPacket_Layer::SharedCtor() {
filter_ = 0;
refid_ = GOOGLE_ULONGLONG(0);
size_ = NULL;
displaylistloglength_ = 0u;
displaylistlog_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
::memset(_has_bits_, 0, sizeof(_has_bits_));
}
@ -2577,6 +2627,9 @@ LayersPacket_Layer::~LayersPacket_Layer() {
}
void LayersPacket_Layer::SharedDtor() {
if (displaylistlog_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
delete displaylistlog_;
}
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
if (this != &default_instance()) {
#else
@ -2657,7 +2710,7 @@ void LayersPacket_Layer::Clear() {
if (noactionregion_ != NULL) noactionregion_->::mozilla::layers::layerscope::LayersPacket_Layer_Region::Clear();
}
}
if (_has_bits_[16 / 32] & 8323072) {
if (_has_bits_[16 / 32] & 16711680) {
ZR_(color_, refid_);
if (has_hpanregion()) {
if (hpanregion_ != NULL) hpanregion_->::mozilla::layers::layerscope::LayersPacket_Layer_Region::Clear();
@ -2671,6 +2724,12 @@ void LayersPacket_Layer::Clear() {
if (has_size()) {
if (size_ != NULL) size_->::mozilla::layers::layerscope::LayersPacket_Layer_Size::Clear();
}
displaylistloglength_ = 0u;
}
if (has_displaylistlog()) {
if (displaylistlog_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_->clear();
}
}
#undef OFFSET_OF_FIELD_
@ -3030,6 +3089,34 @@ bool LayersPacket_Layer::MergePartialFromCodedStream(
} else {
goto handle_unusual;
}
if (input->ExpectTag(840)) goto parse_displayListLogLength;
break;
}
// optional uint32 displayListLogLength = 105;
case 105: {
if (tag == 840) {
parse_displayListLogLength:
DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
input, &displaylistloglength_)));
set_has_displaylistloglength();
} else {
goto handle_unusual;
}
if (input->ExpectTag(850)) goto parse_displayListLog;
break;
}
// optional bytes displayListLog = 106;
case 106: {
if (tag == 850) {
parse_displayListLog:
DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
input, this->mutable_displaylistlog()));
} else {
goto handle_unusual;
}
if (input->ExpectAtEnd()) goto success;
break;
}
@ -3188,6 +3275,17 @@ void LayersPacket_Layer::SerializeWithCachedSizes(
104, this->size(), output);
}
// optional uint32 displayListLogLength = 105;
if (has_displaylistloglength()) {
::google::protobuf::internal::WireFormatLite::WriteUInt32(105, this->displaylistloglength(), output);
}
// optional bytes displayListLog = 106;
if (has_displaylistlog()) {
::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
106, this->displaylistlog(), output);
}
output->WriteRaw(unknown_fields().data(),
unknown_fields().size());
// @@protoc_insertion_point(serialize_end:mozilla.layers.layerscope.LayersPacket.Layer)
@ -3353,6 +3451,22 @@ int LayersPacket_Layer::ByteSize() const {
this->size());
}
// optional uint32 displayListLogLength = 105;
if (has_displaylistloglength()) {
total_size += 2 +
::google::protobuf::internal::WireFormatLite::UInt32Size(
this->displaylistloglength());
}
}
if (_has_bits_[24 / 32] & (0xffu << (24 % 32))) {
// optional bytes displayListLog = 106;
if (has_displaylistlog()) {
total_size += 2 +
::google::protobuf::internal::WireFormatLite::BytesSize(
this->displaylistlog());
}
}
total_size += unknown_fields().size();
@ -3443,6 +3557,14 @@ void LayersPacket_Layer::MergeFrom(const LayersPacket_Layer& from) {
if (from.has_size()) {
mutable_size()->::mozilla::layers::layerscope::LayersPacket_Layer_Size::MergeFrom(from.size());
}
if (from.has_displaylistloglength()) {
set_displaylistloglength(from.displaylistloglength());
}
}
if (from._has_bits_[24 / 32] & (0xffu << (24 % 32))) {
if (from.has_displaylistlog()) {
set_displaylistlog(from.displaylistlog());
}
}
mutable_unknown_fields()->append(from.unknown_fields());
}
@ -3484,6 +3606,8 @@ void LayersPacket_Layer::Swap(LayersPacket_Layer* other) {
std::swap(filter_, other->filter_);
std::swap(refid_, other->refid_);
std::swap(size_, other->size_);
std::swap(displaylistloglength_, other->displaylistloglength_);
std::swap(displaylistlog_, other->displaylistlog_);
std::swap(_has_bits_[0], other->_has_bits_[0]);
_unknown_fields_.swap(other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);
@ -4177,6 +4301,8 @@ const int DrawPacket::kMvMatrixFieldNumber;
const int DrawPacket::kTotalRectsFieldNumber;
const int DrawPacket::kLayerRectFieldNumber;
const int DrawPacket::kLayerrefFieldNumber;
const int DrawPacket::kTexIDsFieldNumber;
const int DrawPacket::kTextureRectFieldNumber;
#endif // !_MSC_VER
DrawPacket::DrawPacket()
@ -4249,14 +4375,19 @@ void DrawPacket::Clear() {
::memset(&first, 0, n); \
} while (0)
ZR_(offsetx_, offsety_);
ZR_(layerref_, totalrects_);
if (_has_bits_[0 / 32] & 43) {
ZR_(offsetx_, offsety_);
totalrects_ = 0u;
layerref_ = GOOGLE_ULONGLONG(0);
}
#undef OFFSET_OF_FIELD_
#undef ZR_
mvmatrix_.Clear();
layerrect_.Clear();
texids_.Clear();
texturerect_.Clear();
::memset(_has_bits_, 0, sizeof(_has_bits_));
mutable_unknown_fields()->clear();
}
@ -4363,6 +4494,39 @@ bool DrawPacket::MergePartialFromCodedStream(
} else {
goto handle_unusual;
}
if (input->ExpectTag(56)) goto parse_texIDs;
break;
}
// repeated uint32 texIDs = 7;
case 7: {
if (tag == 56) {
parse_texIDs:
DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
1, 56, input, this->mutable_texids())));
} else if (tag == 58) {
DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
input, this->mutable_texids())));
} else {
goto handle_unusual;
}
if (input->ExpectTag(56)) goto parse_texIDs;
if (input->ExpectTag(66)) goto parse_textureRect;
break;
}
// repeated .mozilla.layers.layerscope.DrawPacket.Rect textureRect = 8;
case 8: {
if (tag == 66) {
parse_textureRect:
DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
input, add_texturerect()));
} else {
goto handle_unusual;
}
if (input->ExpectTag(66)) goto parse_textureRect;
if (input->ExpectAtEnd()) goto success;
break;
}
@ -4424,6 +4588,18 @@ void DrawPacket::SerializeWithCachedSizes(
::google::protobuf::internal::WireFormatLite::WriteUInt64(6, this->layerref(), output);
}
// repeated uint32 texIDs = 7;
for (int i = 0; i < this->texids_size(); i++) {
::google::protobuf::internal::WireFormatLite::WriteUInt32(
7, this->texids(i), output);
}
// repeated .mozilla.layers.layerscope.DrawPacket.Rect textureRect = 8;
for (int i = 0; i < this->texturerect_size(); i++) {
::google::protobuf::internal::WireFormatLite::WriteMessage(
8, this->texturerect(i), output);
}
output->WriteRaw(unknown_fields().data(),
unknown_fields().size());
// @@protoc_insertion_point(serialize_end:mozilla.layers.layerscope.DrawPacket)
@ -4473,6 +4649,24 @@ int DrawPacket::ByteSize() const {
this->layerrect(i));
}
// repeated uint32 texIDs = 7;
{
int data_size = 0;
for (int i = 0; i < this->texids_size(); i++) {
data_size += ::google::protobuf::internal::WireFormatLite::
UInt32Size(this->texids(i));
}
total_size += 1 * this->texids_size() + data_size;
}
// repeated .mozilla.layers.layerscope.DrawPacket.Rect textureRect = 8;
total_size += 1 * this->texturerect_size();
for (int i = 0; i < this->texturerect_size(); i++) {
total_size +=
::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
this->texturerect(i));
}
total_size += unknown_fields().size();
GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
@ -4490,6 +4684,8 @@ void DrawPacket::MergeFrom(const DrawPacket& from) {
GOOGLE_CHECK_NE(&from, this);
mvmatrix_.MergeFrom(from.mvmatrix_);
layerrect_.MergeFrom(from.layerrect_);
texids_.MergeFrom(from.texids_);
texturerect_.MergeFrom(from.texturerect_);
if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
if (from.has_offsetx()) {
set_offsetx(from.offsetx());
@ -4517,6 +4713,7 @@ bool DrawPacket::IsInitialized() const {
if ((_has_bits_[0] & 0x0000002b) != 0x0000002b) return false;
if (!::google::protobuf::internal::AllAreInitialized(this->layerrect())) return false;
if (!::google::protobuf::internal::AllAreInitialized(this->texturerect())) return false;
return true;
}
@ -4528,6 +4725,8 @@ void DrawPacket::Swap(DrawPacket* other) {
std::swap(totalrects_, other->totalrects_);
layerrect_.Swap(&other->layerrect_);
std::swap(layerref_, other->layerref_);
texids_.Swap(&other->texids_);
texturerect_.Swap(&other->texturerect_);
std::swap(_has_bits_[0], other->_has_bits_[0]);
_unknown_fields_.swap(other->_unknown_fields_);
std::swap(_cached_size_, other->_cached_size_);

View File

@ -183,16 +183,26 @@ class FramePacket : public ::google::protobuf::MessageLite {
inline ::google::protobuf::uint64 value() const;
inline void set_value(::google::protobuf::uint64 value);
// optional float scale = 2;
inline bool has_scale() const;
inline void clear_scale();
static const int kScaleFieldNumber = 2;
inline float scale() const;
inline void set_scale(float value);
// @@protoc_insertion_point(class_scope:mozilla.layers.layerscope.FramePacket)
private:
inline void set_has_value();
inline void clear_has_value();
inline void set_has_scale();
inline void clear_has_scale();
::std::string _unknown_fields_;
::google::protobuf::uint32 _has_bits_[1];
mutable int _cached_size_;
::google::protobuf::uint64 value_;
float scale_;
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
friend void protobuf_AddDesc_LayerScopePacket_2eproto_impl();
#else
@ -1351,6 +1361,25 @@ class LayersPacket_Layer : public ::google::protobuf::MessageLite {
inline ::mozilla::layers::layerscope::LayersPacket_Layer_Size* release_size();
inline void set_allocated_size(::mozilla::layers::layerscope::LayersPacket_Layer_Size* size);
// optional uint32 displayListLogLength = 105;
inline bool has_displaylistloglength() const;
inline void clear_displaylistloglength();
static const int kDisplayListLogLengthFieldNumber = 105;
inline ::google::protobuf::uint32 displaylistloglength() const;
inline void set_displaylistloglength(::google::protobuf::uint32 value);
// optional bytes displayListLog = 106;
inline bool has_displaylistlog() const;
inline void clear_displaylistlog();
static const int kDisplayListLogFieldNumber = 106;
inline const ::std::string& displaylistlog() const;
inline void set_displaylistlog(const ::std::string& value);
inline void set_displaylistlog(const char* value);
inline void set_displaylistlog(const void* value, size_t size);
inline ::std::string* mutable_displaylistlog();
inline ::std::string* release_displaylistlog();
inline void set_allocated_displaylistlog(::std::string* displaylistlog);
// @@protoc_insertion_point(class_scope:mozilla.layers.layerscope.LayersPacket.Layer)
private:
inline void set_has_type();
@ -1399,6 +1428,10 @@ class LayersPacket_Layer : public ::google::protobuf::MessageLite {
inline void clear_has_refid();
inline void set_has_size();
inline void clear_has_size();
inline void set_has_displaylistloglength();
inline void clear_has_displaylistloglength();
inline void set_has_displaylistlog();
inline void clear_has_displaylistlog();
::std::string _unknown_fields_;
@ -1427,6 +1460,8 @@ class LayersPacket_Layer : public ::google::protobuf::MessageLite {
int filter_;
::google::protobuf::uint64 refid_;
::mozilla::layers::layerscope::LayersPacket_Layer_Size* size_;
::std::string* displaylistlog_;
::google::protobuf::uint32 displaylistloglength_;
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
friend void protobuf_AddDesc_LayerScopePacket_2eproto_impl();
#else
@ -1863,6 +1898,30 @@ class DrawPacket : public ::google::protobuf::MessageLite {
inline ::google::protobuf::uint64 layerref() const;
inline void set_layerref(::google::protobuf::uint64 value);
// repeated uint32 texIDs = 7;
inline int texids_size() const;
inline void clear_texids();
static const int kTexIDsFieldNumber = 7;
inline ::google::protobuf::uint32 texids(int index) const;
inline void set_texids(int index, ::google::protobuf::uint32 value);
inline void add_texids(::google::protobuf::uint32 value);
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
texids() const;
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
mutable_texids();
// repeated .mozilla.layers.layerscope.DrawPacket.Rect textureRect = 8;
inline int texturerect_size() const;
inline void clear_texturerect();
static const int kTextureRectFieldNumber = 8;
inline const ::mozilla::layers::layerscope::DrawPacket_Rect& texturerect(int index) const;
inline ::mozilla::layers::layerscope::DrawPacket_Rect* mutable_texturerect(int index);
inline ::mozilla::layers::layerscope::DrawPacket_Rect* add_texturerect();
inline const ::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect >&
texturerect() const;
inline ::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect >*
mutable_texturerect();
// @@protoc_insertion_point(class_scope:mozilla.layers.layerscope.DrawPacket)
private:
inline void set_has_offsetx();
@ -1883,6 +1942,8 @@ class DrawPacket : public ::google::protobuf::MessageLite {
::google::protobuf::RepeatedField< float > mvmatrix_;
::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect > layerrect_;
::google::protobuf::uint64 layerref_;
::google::protobuf::RepeatedField< ::google::protobuf::uint32 > texids_;
::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect > texturerect_;
::google::protobuf::uint32 totalrects_;
#ifdef GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER
friend void protobuf_AddDesc_LayerScopePacket_2eproto_impl();
@ -2222,6 +2283,30 @@ inline void FramePacket::set_value(::google::protobuf::uint64 value) {
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.FramePacket.value)
}
// optional float scale = 2;
inline bool FramePacket::has_scale() const {
return (_has_bits_[0] & 0x00000002u) != 0;
}
inline void FramePacket::set_has_scale() {
_has_bits_[0] |= 0x00000002u;
}
inline void FramePacket::clear_has_scale() {
_has_bits_[0] &= ~0x00000002u;
}
inline void FramePacket::clear_scale() {
scale_ = 0;
clear_has_scale();
}
inline float FramePacket::scale() const {
// @@protoc_insertion_point(field_get:mozilla.layers.layerscope.FramePacket.scale)
return scale_;
}
inline void FramePacket::set_scale(float value) {
set_has_scale();
scale_ = value;
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.FramePacket.scale)
}
// -------------------------------------------------------------------
// ColorPacket
@ -3791,6 +3876,106 @@ inline void LayersPacket_Layer::set_allocated_size(::mozilla::layers::layerscope
// @@protoc_insertion_point(field_set_allocated:mozilla.layers.layerscope.LayersPacket.Layer.size)
}
// optional uint32 displayListLogLength = 105;
inline bool LayersPacket_Layer::has_displaylistloglength() const {
return (_has_bits_[0] & 0x00800000u) != 0;
}
inline void LayersPacket_Layer::set_has_displaylistloglength() {
_has_bits_[0] |= 0x00800000u;
}
inline void LayersPacket_Layer::clear_has_displaylistloglength() {
_has_bits_[0] &= ~0x00800000u;
}
inline void LayersPacket_Layer::clear_displaylistloglength() {
displaylistloglength_ = 0u;
clear_has_displaylistloglength();
}
inline ::google::protobuf::uint32 LayersPacket_Layer::displaylistloglength() const {
// @@protoc_insertion_point(field_get:mozilla.layers.layerscope.LayersPacket.Layer.displayListLogLength)
return displaylistloglength_;
}
inline void LayersPacket_Layer::set_displaylistloglength(::google::protobuf::uint32 value) {
set_has_displaylistloglength();
displaylistloglength_ = value;
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.LayersPacket.Layer.displayListLogLength)
}
// optional bytes displayListLog = 106;
inline bool LayersPacket_Layer::has_displaylistlog() const {
return (_has_bits_[0] & 0x01000000u) != 0;
}
inline void LayersPacket_Layer::set_has_displaylistlog() {
_has_bits_[0] |= 0x01000000u;
}
inline void LayersPacket_Layer::clear_has_displaylistlog() {
_has_bits_[0] &= ~0x01000000u;
}
inline void LayersPacket_Layer::clear_displaylistlog() {
if (displaylistlog_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_->clear();
}
clear_has_displaylistlog();
}
inline const ::std::string& LayersPacket_Layer::displaylistlog() const {
// @@protoc_insertion_point(field_get:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
return *displaylistlog_;
}
inline void LayersPacket_Layer::set_displaylistlog(const ::std::string& value) {
set_has_displaylistlog();
if (displaylistlog_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_ = new ::std::string;
}
displaylistlog_->assign(value);
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
}
inline void LayersPacket_Layer::set_displaylistlog(const char* value) {
set_has_displaylistlog();
if (displaylistlog_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_ = new ::std::string;
}
displaylistlog_->assign(value);
// @@protoc_insertion_point(field_set_char:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
}
inline void LayersPacket_Layer::set_displaylistlog(const void* value, size_t size) {
set_has_displaylistlog();
if (displaylistlog_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_ = new ::std::string;
}
displaylistlog_->assign(reinterpret_cast<const char*>(value), size);
// @@protoc_insertion_point(field_set_pointer:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
}
inline ::std::string* LayersPacket_Layer::mutable_displaylistlog() {
set_has_displaylistlog();
if (displaylistlog_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
displaylistlog_ = new ::std::string;
}
// @@protoc_insertion_point(field_mutable:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
return displaylistlog_;
}
inline ::std::string* LayersPacket_Layer::release_displaylistlog() {
clear_has_displaylistlog();
if (displaylistlog_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
return NULL;
} else {
::std::string* temp = displaylistlog_;
displaylistlog_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
return temp;
}
}
inline void LayersPacket_Layer::set_allocated_displaylistlog(::std::string* displaylistlog) {
if (displaylistlog_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
delete displaylistlog_;
}
if (displaylistlog) {
set_has_displaylistlog();
displaylistlog_ = displaylistlog;
} else {
clear_has_displaylistlog();
displaylistlog_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
// @@protoc_insertion_point(field_set_allocated:mozilla.layers.layerscope.LayersPacket.Layer.displayListLog)
}
// -------------------------------------------------------------------
// LayersPacket
@ -4113,6 +4298,66 @@ inline void DrawPacket::set_layerref(::google::protobuf::uint64 value) {
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.DrawPacket.layerref)
}
// repeated uint32 texIDs = 7;
inline int DrawPacket::texids_size() const {
return texids_.size();
}
inline void DrawPacket::clear_texids() {
texids_.Clear();
}
inline ::google::protobuf::uint32 DrawPacket::texids(int index) const {
// @@protoc_insertion_point(field_get:mozilla.layers.layerscope.DrawPacket.texIDs)
return texids_.Get(index);
}
inline void DrawPacket::set_texids(int index, ::google::protobuf::uint32 value) {
texids_.Set(index, value);
// @@protoc_insertion_point(field_set:mozilla.layers.layerscope.DrawPacket.texIDs)
}
inline void DrawPacket::add_texids(::google::protobuf::uint32 value) {
texids_.Add(value);
// @@protoc_insertion_point(field_add:mozilla.layers.layerscope.DrawPacket.texIDs)
}
inline const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >&
DrawPacket::texids() const {
// @@protoc_insertion_point(field_list:mozilla.layers.layerscope.DrawPacket.texIDs)
return texids_;
}
inline ::google::protobuf::RepeatedField< ::google::protobuf::uint32 >*
DrawPacket::mutable_texids() {
// @@protoc_insertion_point(field_mutable_list:mozilla.layers.layerscope.DrawPacket.texIDs)
return &texids_;
}
// repeated .mozilla.layers.layerscope.DrawPacket.Rect textureRect = 8;
inline int DrawPacket::texturerect_size() const {
return texturerect_.size();
}
inline void DrawPacket::clear_texturerect() {
texturerect_.Clear();
}
inline const ::mozilla::layers::layerscope::DrawPacket_Rect& DrawPacket::texturerect(int index) const {
// @@protoc_insertion_point(field_get:mozilla.layers.layerscope.DrawPacket.textureRect)
return texturerect_.Get(index);
}
inline ::mozilla::layers::layerscope::DrawPacket_Rect* DrawPacket::mutable_texturerect(int index) {
// @@protoc_insertion_point(field_mutable:mozilla.layers.layerscope.DrawPacket.textureRect)
return texturerect_.Mutable(index);
}
inline ::mozilla::layers::layerscope::DrawPacket_Rect* DrawPacket::add_texturerect() {
// @@protoc_insertion_point(field_add:mozilla.layers.layerscope.DrawPacket.textureRect)
return texturerect_.Add();
}
inline const ::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect >&
DrawPacket::texturerect() const {
// @@protoc_insertion_point(field_list:mozilla.layers.layerscope.DrawPacket.textureRect)
return texturerect_;
}
inline ::google::protobuf::RepeatedPtrField< ::mozilla::layers::layerscope::DrawPacket_Rect >*
DrawPacket::mutable_texturerect() {
// @@protoc_insertion_point(field_mutable_list:mozilla.layers.layerscope.DrawPacket.textureRect)
return &texturerect_;
}
// -------------------------------------------------------------------
// Packet

View File

@ -9,6 +9,7 @@ package mozilla.layers.layerscope;
// ===============================
message FramePacket {
optional uint64 value = 1;
optional float scale = 2;
}
message ColorPacket {
@ -114,6 +115,8 @@ message LayersPacket {
optional uint64 refID = 103;
// Readback Layer
optional Size size = 104;
optional uint32 displayListLogLength = 105;
optional bytes displayListLog = 106;
}
repeated Layer layer = 1;
}
@ -136,6 +139,8 @@ message DrawPacket {
required uint32 totalRects = 4;
repeated Rect layerRect = 5;
required uint64 layerref = 6;
repeated uint32 texIDs = 7;
repeated Rect textureRect = 8;
}
// We only need to use this Packet.

View File

@ -263,16 +263,6 @@ PrintDisplayListTo(nsDisplayListBuilder* aBuilder, const nsDisplayList& aList,
}
}
void
nsFrame::PrintDisplayItem(nsDisplayListBuilder* aBuilder,
nsDisplayItem* aItem,
std::stringstream& aStream,
bool aDumpSublist,
bool aDumpHtml)
{
PrintDisplayItemTo(aBuilder, aItem, aStream, 0, aDumpSublist, aDumpHtml);
}
void
nsFrame::PrintDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayList& aList,

View File

@ -3364,6 +3364,10 @@ nsLayoutUtils::PaintFrame(nsRenderingContext* aRenderingContext, nsIFrame* aFram
gfxUtils::sDumpPaintFile = savedDumpFile;
gPaintCount++;
#endif
std::stringstream lsStream;
nsFrame::PrintDisplayList(&builder, list, lsStream);
layerManager->GetRoot()->SetDisplayListLog(lsStream.str().c_str());
}
#ifdef MOZ_DUMP_PAINTING

View File

@ -734,12 +734,6 @@ public:
public:
static void PrintDisplayItem(nsDisplayListBuilder* aBuilder,
nsDisplayItem* aItem,
std::stringstream& aStream,
bool aDumpSublist = false,
bool aDumpHtml = false);
static void PrintDisplayList(nsDisplayListBuilder* aBuilder,
const nsDisplayList& aList,
bool aDumpHtml = false)

View File

@ -4634,7 +4634,7 @@ public:
aInvalidRegion->Or(oldRect, newRect);
}
}
virtual void DisableComponentAlpha() override {
mDisableSubpixelAA = true;
}