Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1400)

Unified Diff: content/renderer/gpu/gpu_benchmarking_extension.cc

Issue 2265483002: chrome.gpuBenchmarking.printPagesToSkPictures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: respond to Lei Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/gpu/gpu_benchmarking_extension.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/gpu/gpu_benchmarking_extension.cc
diff --git a/content/renderer/gpu/gpu_benchmarking_extension.cc b/content/renderer/gpu/gpu_benchmarking_extension.cc
index 6fbc7e7b0ec29f2500d410f75c20f6a4e1fe5b50..e8d968e399bfe277861e8d0591df65e7c8ea121a 100644
--- a/content/renderer/gpu/gpu_benchmarking_extension.cc
+++ b/content/renderer/gpu/gpu_benchmarking_extension.cc
@@ -38,13 +38,18 @@
#include "third_party/WebKit/public/web/WebImageCache.h"
#include "third_party/WebKit/public/web/WebKit.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
+#include "third_party/WebKit/public/web/WebPrintParams.h"
#include "third_party/WebKit/public/web/WebView.h"
#include "third_party/skia/include/core/SkData.h"
#include "third_party/skia/include/core/SkGraphics.h"
#include "third_party/skia/include/core/SkPicture.h"
+#include "third_party/skia/include/core/SkPictureRecorder.h"
#include "third_party/skia/include/core/SkPixelRef.h"
#include "third_party/skia/include/core/SkPixelSerializer.h"
#include "third_party/skia/include/core/SkStream.h"
+// Note that headers in third_party/skia/src are fragile. This is
+// an experimental, fragile, and diagnostic-only document type.
+#include "third_party/skia/src/utils/SkMultiPictureDocument.h"
#include "ui/gfx/codec/png_codec.h"
#include "v8/include/v8.h"
@@ -486,6 +491,8 @@ gin::ObjectTemplateBuilder GpuBenchmarking::GetObjectTemplateBuilder(
.SetMethod("setRasterizeOnlyVisibleContent",
&GpuBenchmarking::SetRasterizeOnlyVisibleContent)
.SetMethod("printToSkPicture", &GpuBenchmarking::PrintToSkPicture)
+ .SetMethod("printPagesToSkPictures",
+ &GpuBenchmarking::PrintPagesToSkPictures)
.SetValue("DEFAULT_INPUT", 0)
.SetValue("TOUCH_INPUT", 1)
.SetValue("MOUSE_INPUT", 2)
@@ -528,6 +535,45 @@ void GpuBenchmarking::SetRasterizeOnlyVisibleContent() {
context.compositor()->SetRasterizeOnlyVisibleContent();
}
+void GpuBenchmarking::PrintPagesToSkPictures(v8::Isolate* isolate,
+ const std::string& filename) {
+ GpuBenchmarkingContext context;
+ if (!context.Init(true))
+ return;
+
+ base::FilePath path = base::FilePath::FromUTF8Unsafe(filename);
+ if (!base::PathIsWritable(path.DirName())) {
+ std::string msg("Path is not writable: ");
+ msg.append(path.DirName().MaybeAsASCII());
+ isolate->ThrowException(v8::Exception::Error(v8::String::NewFromUtf8(
+ isolate, msg.c_str(), v8::String::kNormalString, msg.length())));
+ return;
+ }
+ const int kWidth = 612; // 8.5 inch
+ const int kHeight = 792; // 11 inch
+ const int kMarginTop = 29; // 0.40 inch
+ const int kMarginLeft = 29; // 0.40 inch
+ const int kContentWidth = 555; // 7.71 inch
+ const int kContentHeight = 735; // 10.21 inch
+ blink::WebPrintParams params(blink::WebSize(kWidth, kHeight));
+ params.printerDPI = 72;
+ params.printScalingOption = blink::WebPrintScalingOptionSourceSize;
+ params.printContentArea =
+ blink::WebRect(kMarginLeft, kMarginTop, kContentWidth, kContentHeight);
+ SkFILEWStream wStream(path.MaybeAsASCII().c_str());
+ sk_sp<SkDocument> doc = SkMakeMultiPictureDocument(&wStream);
+ int page_count = context.web_frame()->printBegin(params);
+ for (int i = 0; i < page_count; ++i) {
+ SkCanvas* canvas =
+ doc->beginPage(SkIntToScalar(kWidth), SkIntToScalar(kHeight));
+ SkAutoCanvasRestore auto_restore(canvas, true);
+ canvas->translate(SkIntToScalar(kMarginLeft), SkIntToScalar(kMarginTop));
+ context.web_frame()->printPage(i, canvas);
+ }
+ context.web_frame()->printEnd();
+ doc->close();
+}
+
void GpuBenchmarking::PrintToSkPicture(v8::Isolate* isolate,
const std::string& dirname) {
GpuBenchmarkingContext context;
« no previous file with comments | « content/renderer/gpu/gpu_benchmarking_extension.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698