summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkalyan.kondapally <kalyan.kondapally@intel.com>2015-09-16 11:03:23 -0700
committerCommit bot <commit-bot@chromium.org>2015-09-16 18:04:04 +0000
commit9ee0841722352577f208463072d0c812d3b50765 (patch)
treec7df0162d713da7e74cec847e5ccadbb1080c972
parenta54b6d269ac27c5ebb7b1b8d6fe8159c1f5d6dbb (diff)
downloadchromium_src-9ee0841722352577f208463072d0c812d3b50765.zip
chromium_src-9ee0841722352577f208463072d0c812d3b50765.tar.gz
chromium_src-9ee0841722352577f208463072d0c812d3b50765.tar.bz2
Explicitly pass format to ScanoutBufferGenerator
Currently, we assume it's always going to be RGBX format and create appropriate buffer. However, we also want to support creation of buffers with other formats(i.e YUV) to test overlay candidates in TestPageFlip. This patch adds needed support for this. BUG=370522 Review URL: https://codereview.chromium.org/1348643002 Cr-Commit-Position: refs/heads/master@{#349160}
-rw-r--r--ui/ozone/platform/drm/gpu/drm_buffer.cc1
-rw-r--r--ui/ozone/platform/drm/gpu/drm_buffer.h1
-rw-r--r--ui/ozone/platform/drm/gpu/drm_window.cc3
-rw-r--r--ui/ozone/platform/drm/gpu/scanout_buffer.h2
-rw-r--r--ui/ozone/platform/drm/gpu/screen_manager.cc4
-rw-r--r--ui/ozone/platform/drm/gpu/screen_manager_unittest.cc4
-rw-r--r--ui/ozone/platform/drm/ozone_platform_gbm.cc3
7 files changed, 12 insertions, 6 deletions
diff --git a/ui/ozone/platform/drm/gpu/drm_buffer.cc b/ui/ozone/platform/drm/gpu/drm_buffer.cc
index ec3d99a..e36c696 100644
--- a/ui/ozone/platform/drm/gpu/drm_buffer.cc
+++ b/ui/ozone/platform/drm/gpu/drm_buffer.cc
@@ -135,6 +135,7 @@ DrmBufferGenerator::~DrmBufferGenerator() {
scoped_refptr<ScanoutBuffer> DrmBufferGenerator::Create(
const scoped_refptr<DrmDevice>& drm,
+ gfx::BufferFormat format,
const gfx::Size& size) {
scoped_refptr<DrmBuffer> buffer(new DrmBuffer(drm));
SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height());
diff --git a/ui/ozone/platform/drm/gpu/drm_buffer.h b/ui/ozone/platform/drm/gpu/drm_buffer.h
index 76027b6..a04d4b6 100644
--- a/ui/ozone/platform/drm/gpu/drm_buffer.h
+++ b/ui/ozone/platform/drm/gpu/drm_buffer.h
@@ -73,6 +73,7 @@ class OZONE_EXPORT DrmBufferGenerator : public ScanoutBufferGenerator {
// ScanoutBufferGenerator:
scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm,
+ gfx::BufferFormat format,
const gfx::Size& size) override;
private:
diff --git a/ui/ozone/platform/drm/gpu/drm_window.cc b/ui/ozone/platform/drm/gpu/drm_window.cc
index 910683a..0aa6284 100644
--- a/ui/ozone/platform/drm/gpu/drm_window.cc
+++ b/ui/ozone/platform/drm/gpu/drm_window.cc
@@ -167,7 +167,8 @@ bool DrmWindow::TestPageFlip(const std::vector<OverlayCheck_Params>& overlays,
for (const auto& overlay : overlays) {
gfx::Size size =
(overlay.plane_z_order == 0) ? bounds().size() : overlay.buffer_size;
- scoped_refptr<ScanoutBuffer> buffer = buffer_generator->Create(drm, size);
+ scoped_refptr<ScanoutBuffer> buffer =
+ buffer_generator->Create(drm, overlay.format, size);
if (!buffer)
return false;
planes.push_back(OverlayPlane(buffer, overlay.plane_z_order,
diff --git a/ui/ozone/platform/drm/gpu/scanout_buffer.h b/ui/ozone/platform/drm/gpu/scanout_buffer.h
index d8712fa..53412e8 100644
--- a/ui/ozone/platform/drm/gpu/scanout_buffer.h
+++ b/ui/ozone/platform/drm/gpu/scanout_buffer.h
@@ -8,6 +8,7 @@
#include <stdint.h>
#include "base/memory/ref_counted.h"
+#include "ui/gfx/buffer_types.h"
#include "ui/gfx/geometry/size.h"
namespace ui {
@@ -43,6 +44,7 @@ class ScanoutBufferGenerator {
virtual scoped_refptr<ScanoutBuffer> Create(
const scoped_refptr<DrmDevice>& drm,
+ gfx::BufferFormat format,
const gfx::Size& size) = 0;
};
diff --git a/ui/ozone/platform/drm/gpu/screen_manager.cc b/ui/ozone/platform/drm/gpu/screen_manager.cc
index 2aba0d9..434f8c4 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager.cc
@@ -342,8 +342,8 @@ OverlayPlane ScreenManager::GetModesetBuffer(
}
scoped_refptr<DrmDevice> drm = controller->GetAllocationDrmDevice();
- scoped_refptr<ScanoutBuffer> buffer =
- buffer_generator_->Create(drm, bounds.size());
+ scoped_refptr<ScanoutBuffer> buffer = buffer_generator_->Create(
+ drm, gfx::BufferFormat::BGRA_8888, bounds.size());
if (!buffer) {
LOG(ERROR) << "Failed to create scanout buffer";
return OverlayPlane(nullptr, 0, gfx::OVERLAY_TRANSFORM_INVALID, gfx::Rect(),
diff --git a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
index 662aba9..8d8a96ee 100644
--- a/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc
@@ -460,8 +460,8 @@ TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasBuffer) {
new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get()));
window->Initialize();
window->OnBoundsChanged(GetPrimaryBounds());
- scoped_refptr<ui::ScanoutBuffer> buffer =
- buffer_generator_->Create(drm_, GetPrimaryBounds().size());
+ scoped_refptr<ui::ScanoutBuffer> buffer = buffer_generator_->Create(
+ drm_, gfx::BufferFormat::BGRA_8888, GetPrimaryBounds().size());
window->QueueOverlayPlane(ui::OverlayPlane(buffer));
window->SchedulePageFlip(false /* is_sync */, base::Bind(&EmptySwapCallback));
screen_manager_->AddWindow(1, window.Pass());
diff --git a/ui/ozone/platform/drm/ozone_platform_gbm.cc b/ui/ozone/platform/drm/ozone_platform_gbm.cc
index c496fd8..0a6e08c 100644
--- a/ui/ozone/platform/drm/ozone_platform_gbm.cc
+++ b/ui/ozone/platform/drm/ozone_platform_gbm.cc
@@ -78,9 +78,10 @@ class GbmBufferGenerator : public ScanoutBufferGenerator {
// ScanoutBufferGenerator:
scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm,
+ gfx::BufferFormat format,
const gfx::Size& size) override {
scoped_refptr<GbmDevice> gbm(static_cast<GbmDevice*>(drm.get()));
- return GbmBuffer::CreateBuffer(gbm, gfx::BufferFormat::BGRA_8888, size,
+ return GbmBuffer::CreateBuffer(gbm, format, size,
gfx::BufferUsage::SCANOUT);
}