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

Unified Diff: content/browser/devtools/protocol/page_handler.cc

Issue 716053003: [DevTools] Move PNG encoding from UI to worker thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 1 month 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/browser/devtools/protocol/page_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/devtools/protocol/page_handler.cc
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index f16150b1b94e39e016b05eb26c50b8824565e431..ead104c7eaf256efa39dce954633b30c8d31d5ae 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -10,6 +10,7 @@
#include "base/bind.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/threading/worker_pool.h"
#include "content/browser/devtools/protocol/color_picker.h"
#include "content/browser/devtools/protocol/usage_and_quota_query.h"
#include "content/browser/geolocation/geolocation_service_context.h"
@@ -46,7 +47,7 @@ static const char kJpeg[] = "jpeg";
static int kDefaultScreenshotQuality = 80;
static int kFrameRetryDelayMs = 100;
static int kCaptureRetryLimit = 2;
-static int kMaxScreencastFramesInFlight = 4;
+static int kMaxScreencastFramesInFlight = 2;
void QueryUsageAndQuotaCompletedOnIOThread(
const UsageAndQuotaQuery::Callback& callback,
@@ -477,31 +478,14 @@ void PageHandler::InnerSwapCompositorFrame() {
snapshot_size_dip,
base::Bind(&PageHandler::ScreencastFrameCaptured,
weak_factory_.GetWeakPtr(),
- screencast_format_,
- screencast_quality_,
last_compositor_frame_metadata_),
kN32_SkColorType);
}
}
-void PageHandler::ScreencastFrameCaptured(
- const std::string& format,
- int quality,
- const cc::CompositorFrameMetadata& metadata,
- const SkBitmap& bitmap,
- ReadbackResponse response) {
- if (response != READBACK_SUCCESS) {
- if (capture_retry_count_) {
- --capture_retry_count_;
- base::MessageLoop::current()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&PageHandler::InnerSwapCompositorFrame,
- weak_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(kFrameRetryDelayMs));
- }
- return;
- }
-
+static std::string EncodeScreencastFrame(const SkBitmap& bitmap,
dgozman 2014/11/20 14:23:05 Let's move to the namespace at the top and remove
vkuzkokov 2014/11/20 14:55:27 Done.
+ const std::string& format,
+ int quality) {
std::vector<unsigned char> data;
SkAutoLockPixels lock_image(bitmap);
bool encoded;
@@ -525,15 +509,45 @@ void PageHandler::ScreencastFrameCaptured(
}
if (!encoded)
- return;
+ return std::string();
std::string base_64_data;
base::Base64Encode(
base::StringPiece(reinterpret_cast<char*>(&data[0]), data.size()),
&base_64_data);
+ return base_64_data;
+}
+
+void PageHandler::ScreencastFrameCaptured(
+ const cc::CompositorFrameMetadata& metadata,
+ const SkBitmap& bitmap,
+ ReadbackResponse response) {
+ if (response != READBACK_SUCCESS) {
+ if (capture_retry_count_) {
+ --capture_retry_count_;
+ base::MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&PageHandler::InnerSwapCompositorFrame,
+ weak_factory_.GetWeakPtr()),
+ base::TimeDelta::FromMilliseconds(kFrameRetryDelayMs));
+ }
+ return;
+ }
+ base::PostTaskAndReplyWithResult(
+ base::WorkerPool::GetTaskRunner(true).get(),
+ FROM_HERE,
+ base::Bind(&EncodeScreencastFrame,
+ bitmap, screencast_format_, screencast_quality_),
+ base::Bind(&PageHandler::ScreencastFrameEncoded,
+ weak_factory_.GetWeakPtr(), metadata));
+}
+
+void PageHandler::ScreencastFrameEncoded(
+ const cc::CompositorFrameMetadata& metadata,
+ const std::string& data) {
// Consider metadata empty in case it has no device scale factor.
- if (metadata.device_scale_factor == 0 || !host_)
+ if (metadata.device_scale_factor == 0 || !host_ || data.empty())
return;
RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
@@ -552,7 +566,7 @@ void PageHandler::ScreencastFrameCaptured(
->set_scroll_offset_x(metadata.root_scroll_offset.x())
->set_scroll_offset_y(metadata.root_scroll_offset.y());
client_->ScreencastFrame(ScreencastFrameParams::Create()
- ->set_data(base_64_data)
+ ->set_data(data)
->set_metadata(param_metadata)
->set_frame_number(++screencast_frame_sent_));
}
« no previous file with comments | « content/browser/devtools/protocol/page_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698