summaryrefslogtreecommitdiffstats
path: root/gfx/layers/composite/PaintCounter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/composite/PaintCounter.cpp')
-rw-r--r--gfx/layers/composite/PaintCounter.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/gfx/layers/composite/PaintCounter.cpp b/gfx/layers/composite/PaintCounter.cpp
new file mode 100644
index 000000000..56e57aab4
--- /dev/null
+++ b/gfx/layers/composite/PaintCounter.cpp
@@ -0,0 +1,79 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/gfx/Point.h" // for IntSize, Point
+#include "mozilla/gfx/Rect.h" // for Rect
+#include "mozilla/gfx/Types.h" // for Color, SurfaceFormat
+#include "mozilla/layers/Compositor.h" // for Compositor
+#include "mozilla/layers/CompositorTypes.h"
+#include "mozilla/layers/Effects.h" // for Effect, EffectChain, etc
+#include "mozilla/TimeStamp.h" // for TimeStamp, TimeDuration
+#include "mozilla/Sprintf.h"
+
+#include "mozilla/gfx/HelpersSkia.h"
+#include "PaintCounter.h"
+
+namespace mozilla {
+namespace layers {
+
+using namespace mozilla::gfx;
+
+// Positioned below the chrome UI
+IntRect PaintCounter::mRect = IntRect(0, 175, 300, 60);
+
+PaintCounter::PaintCounter()
+{
+ mFormat = SurfaceFormat::B8G8R8A8;
+ mSurface = Factory::CreateDataSourceSurface(mRect.Size(), mFormat);
+ mStride = mSurface->Stride();
+
+ mCanvas.reset(
+ SkCanvas::NewRasterDirect(MakeSkiaImageInfo(mRect.Size(), mFormat),
+ mSurface->GetData(), mStride));
+ mCanvas->clear(SK_ColorWHITE);
+}
+
+PaintCounter::~PaintCounter()
+{
+ mSurface = nullptr;
+ mTextureSource = nullptr;
+ mTexturedEffect = nullptr;
+}
+
+void
+PaintCounter::Draw(Compositor* aCompositor, TimeDuration aPaintTime, TimeDuration aCompositeTime) {
+ char buffer[48];
+ SprintfLiteral(buffer, "P: %.2f C: %.2f",
+ aPaintTime.ToMilliseconds(),
+ aCompositeTime.ToMilliseconds());
+
+ SkPaint paint;
+ paint.setTextSize(32);
+ paint.setColor(SkColorSetRGB(0, 255, 0));
+ paint.setAntiAlias(true);
+
+ mCanvas->clear(SK_ColorTRANSPARENT);
+ mCanvas->drawText(buffer, strlen(buffer), 10, 30, paint);
+ mCanvas->flush();
+
+ if (!mTextureSource) {
+ mTextureSource = aCompositor->CreateDataTextureSource();
+ mTexturedEffect = CreateTexturedEffect(mFormat, mTextureSource,
+ SamplingFilter::POINT, true);
+ mTexturedEffect->mTextureCoords = Rect(0, 0, 1.0f, 1.0f);
+ }
+
+ mTextureSource->Update(mSurface);
+
+ EffectChain effectChain;
+ effectChain.mPrimaryEffect = mTexturedEffect;
+
+ gfx::Matrix4x4 identity;
+ Rect rect(mRect.x, mRect.y, mRect.width, mRect.height);
+ aCompositor->DrawQuad(rect, mRect, effectChain, 1.0, identity);
+}
+
+} // end namespace layers
+} // end namespace mozilla