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

Unified Diff: content/browser/compositor/delegated_frame_host.cc

Issue 384453002: wip: Improving GestureNav screenshotting performance Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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
Index: content/browser/compositor/delegated_frame_host.cc
diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc
index 5db69b70b4c938fb5720c32ba69d9658eddf2757..f1ab500008da5fd355e60b251886da4cd2f99b0d 100644
--- a/content/browser/compositor/delegated_frame_host.cc
+++ b/content/browser/compositor/delegated_frame_host.cc
@@ -18,6 +18,10 @@
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
#include "skia/ext/image_operations.h"
+#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkPaint.h"
+#include "third_party/skia/include/effects/SkLumaColorFilter.h"
+
namespace content {
@@ -122,7 +126,8 @@ void DelegatedFrameHost::CopyFromCompositingSurface(
const base::Callback<void(bool, const SkBitmap&)>& callback,
const SkBitmap::Config config) {
// Only ARGB888 and RGB565 supported as of now.
- bool format_support = ((config == SkBitmap::kRGB_565_Config) ||
+ bool format_support = ((config == SkBitmap::kA8_Config) ||
+ (config == SkBitmap::kRGB_565_Config) ||
(config == SkBitmap::kARGB_8888_Config));
DCHECK(format_support);
if (!CanCopyToBitmap()) {
@@ -438,6 +443,7 @@ void DelegatedFrameHost::CopyFromCompositingSurfaceHasResult(
}
if (result->HasTexture()) {
+ LOG(ERROR) << "result->HasTexture()";
PrepareTextureCopyOutputResult(dst_size_in_pixel, config,
callback,
result.Pass());
@@ -445,6 +451,7 @@ void DelegatedFrameHost::CopyFromCompositingSurfaceHasResult(
}
DCHECK(result->HasBitmap());
+ LOG(ERROR) << "result->HasBitmap()";
PrepareBitmapCopyOutputResult(dst_size_in_pixel, config, callback,
result.Pass());
}
@@ -455,6 +462,7 @@ static void CopyFromCompositingSurfaceFinished(
scoped_ptr<SkBitmap> bitmap,
scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock,
bool result) {
+ LOG(ERROR) << "CopyFromCompositingSurfaceFinished";
bitmap_pixels_lock.reset();
uint32 sync_point = 0;
@@ -466,6 +474,7 @@ static void CopyFromCompositingSurfaceFinished(
release_callback->Run(sync_point, lost_resource);
callback.Run(result, *bitmap);
+ LOG(ERROR) << "=== CopyFromCompositingSurfaceFinished EXITING";
}
// static
@@ -474,6 +483,9 @@ void DelegatedFrameHost::PrepareTextureCopyOutputResult(
const SkBitmap::Config config,
const base::Callback<void(bool, const SkBitmap&)>& callback,
scoped_ptr<cc::CopyOutputResult> result) {
+ LOG(ERROR) << "DelegatedFrameHost::PrepareTextureCopyOutputResult"
+ << ", bitmap config=" << config;
+
DCHECK(result->HasTexture());
base::ScopedClosureRunner scoped_callback_runner(
base::Bind(callback, false, SkBitmap()));
@@ -523,7 +535,7 @@ void DelegatedFrameHost::PrepareBitmapCopyOutputResult(
const SkBitmap::Config config,
const base::Callback<void(bool, const SkBitmap&)>& callback,
scoped_ptr<cc::CopyOutputResult> result) {
- if (config != SkBitmap::kARGB_8888_Config) {
+ if (config != SkBitmap::kARGB_8888_Config && config != SkBitmap::kA8_Config) {
mfomitchev 2014/07/09 18:02:10 Any tips for testing this code path? How do I make
danakj 2014/07/10 19:13:02 Software compositing. https://code.google.com/p/ch
mfomitchev 2014/07/11 19:46:07 It uses --disable-gpu, but when I try to launch ch
mfomitchev 2014/07/11 20:47:50 Ah, looks like I can call force_bitmap_result() on
danakj 2014/07/11 20:52:16 I'm planning to remove that. You want --ui-disable
mfomitchev 2014/07/11 21:06:51 Ok, thanks. Does this path actually have value?
danakj 2014/07/11 21:15:03 We don't use software compositing on chromeos. We
mfomitchev 2014/07/14 14:30:28 Got it, thanks. On a related note, do you think it
danakj 2014/07/14 14:51:06 I was thinking about removing it actually, since t
mfomitchev 2014/07/14 15:00:40 Are you talking about force_bitmap_result()? Speci
danakj 2014/07/14 15:01:52 Yep I'm talking about that. The bitmap output woul
mfomitchev 2014/07/14 15:06:33 Right, and as you said software compositing may be
NOTIMPLEMENTED();
callback.Run(false, SkBitmap());
return;
@@ -531,12 +543,34 @@ void DelegatedFrameHost::PrepareBitmapCopyOutputResult(
DCHECK(result->HasBitmap());
scoped_ptr<SkBitmap> source = result->TakeBitmap();
DCHECK(source);
- SkBitmap bitmap = skia::ImageOperations::Resize(
- *source,
- skia::ImageOperations::RESIZE_BEST,
- dst_size_in_pixel.width(),
- dst_size_in_pixel.height());
- callback.Run(true, bitmap);
+ SkBitmap scaledBitmap;
danakj 2014/07/10 19:13:02 scaled_bitmap
mfomitchev 2014/07/11 19:46:07 Done.
+ if (source->width() != dst_size_in_pixel.width() ||
+ source->height() != dst_size_in_pixel.height()) {
danakj 2014/07/10 19:13:02 if they are == you want to return the original bit
mfomitchev 2014/07/11 19:46:07 Oops. Done.
+ scaledBitmap = skia::ImageOperations::Resize(
+ *source,
+ skia::ImageOperations::RESIZE_BEST,
+ dst_size_in_pixel.width(),
+ dst_size_in_pixel.height());
+ }
+ if (config == SkBitmap::kARGB_8888_Config) {
+ callback.Run(true, scaledBitmap);
+ return;
+ }
+ // Else - |config| is kA8_Config.
danakj 2014/07/10 19:13:02 how about DCHECK_EQ(config, kA8_Config) instead of
mfomitchev 2014/07/11 19:46:07 Done.
+ // Paint |scaledBitmap| to alpha-only |a8Bitmap|.
+ SkBitmap a8Bitmap;
danakj 2014/07/10 19:13:02 grayscale_bitmap
+ a8Bitmap.setConfig(SkBitmap::kA8_Config,
danakj 2014/07/10 19:13:02 setConfig is deprecated. Use an SkImageInfo that y
mfomitchev 2014/07/11 19:46:07 Done.
+ scaledBitmap.width(),
+ scaledBitmap.height(),
+ 0);
+ a8Bitmap.allocPixels();
+ SkCanvas canvas(a8Bitmap);
+ SkPaint paint;
+ SkColorFilter* filter = SkLumaColorFilter::Create();
+ paint.setColorFilter(filter);
+ filter->unref();
danakj 2014/07/10 19:13:02 no manual refcounting. use skia::RefPtr instead
mfomitchev 2014/07/11 19:46:07 Neat! Done.
+ canvas.drawBitmap(scaledBitmap, SkIntToScalar(0), SkIntToScalar(0), &paint);
+ callback.Run(true, a8Bitmap);
}
// static
@@ -555,6 +589,7 @@ void DelegatedFrameHost::ReturnSubscriberTexture(
dfh->idle_frame_subscriber_textures_.push_back(subscriber_texture);
}
+// static
void DelegatedFrameHost::CopyFromCompositingSurfaceFinishedForVideo(
base::WeakPtr<DelegatedFrameHost> dfh,
const base::Callback<void(bool)>& callback,

Powered by Google App Engine
This is Rietveld 408576698