| Index: ui/ozone/platform/cast/surface_factory_cast.cc
|
| diff --git a/ui/ozone/platform/cast/surface_factory_cast.cc b/ui/ozone/platform/cast/surface_factory_cast.cc
|
| index f3dbe1cfd0c8bfef07ab0e86c0a2f746885f4d33..27b20210c240364947a30895007a2acc2c74a039 100644
|
| --- a/ui/ozone/platform/cast/surface_factory_cast.cc
|
| +++ b/ui/ozone/platform/cast/surface_factory_cast.cc
|
| @@ -10,8 +10,11 @@
|
| #include <utility>
|
|
|
| #include "base/callback_helpers.h"
|
| +#include "base/command_line.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "chromecast/base/chromecast_switches.h"
|
| #include "chromecast/public/cast_egl_platform.h"
|
| #include "chromecast/public/graphics_types.h"
|
| #include "third_party/skia/include/core/SkSurface.h"
|
| @@ -34,13 +37,20 @@ chromecast::Size FromGfxSize(const gfx::Size& size) {
|
| return chromecast::Size(size.width(), size.height());
|
| }
|
|
|
| -// Initial display size to create, needed before first window is created.
|
| -gfx::Size GetInitialDisplaySize() {
|
| - return gfx::Size(1280, 720);
|
| -}
|
| -
|
| -// Hard lower bound on display resolution
|
| -gfx::Size GetMinDisplaySize() {
|
| +// Display resolution, set in browser process and passed by switches.
|
| +gfx::Size GetDisplaySize() {
|
| + base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
|
| + int width, height;
|
| + if (base::StringToInt(
|
| + cmd_line->GetSwitchValueASCII(switches::kCastInitialScreenWidth),
|
| + &width) &&
|
| + base::StringToInt(
|
| + cmd_line->GetSwitchValueASCII(switches::kCastInitialScreenHeight),
|
| + &height)) {
|
| + return gfx::Size(width, height);
|
| + }
|
| + LOG(WARNING) << "Unable to get initial screen resolution from command line,"
|
| + << "using default 720p";
|
| return gfx::Size(1280, 720);
|
| }
|
|
|
| @@ -79,8 +89,7 @@ SurfaceFactoryCast::SurfaceFactoryCast(
|
| display_type_(0),
|
| have_display_type_(false),
|
| window_(0),
|
| - display_size_(GetInitialDisplaySize()),
|
| - new_display_size_(GetInitialDisplaySize()),
|
| + display_size_(GetDisplaySize()),
|
| egl_platform_(std::move(egl_platform)),
|
| overlay_count_(0),
|
| previous_frame_overlay_count_(0) {}
|
| @@ -175,10 +184,6 @@ void SurfaceFactoryCast::CreateDisplayTypeAndWindowIfNeeded() {
|
| if (state_ == kUninitialized) {
|
| InitializeHardware();
|
| }
|
| - if (new_display_size_ != display_size_) {
|
| - DestroyDisplayTypeAndWindow();
|
| - display_size_ = new_display_size_;
|
| - }
|
| DCHECK_EQ(state_, kInitialized);
|
| if (!have_display_type_) {
|
| chromecast::Size create_size = FromGfxSize(display_size_);
|
| @@ -203,12 +208,8 @@ intptr_t SurfaceFactoryCast::GetNativeWindow() {
|
| }
|
|
|
| bool SurfaceFactoryCast::ResizeDisplay(gfx::Size size) {
|
| - // set size to at least 1280x720 even if passed 1x1
|
| - size.SetToMax(GetMinDisplaySize());
|
| - if (have_display_type_ && size != display_size_) {
|
| - DestroyDisplayTypeAndWindow();
|
| - }
|
| - display_size_ = size;
|
| + DCHECK_EQ(size.width(), display_size_.width());
|
| + DCHECK_EQ(size.height(), display_size_.height());
|
| return true;
|
| }
|
|
|
| @@ -230,8 +231,9 @@ void SurfaceFactoryCast::DestroyDisplayTypeAndWindow() {
|
|
|
| std::unique_ptr<SurfaceOzoneEGL> SurfaceFactoryCast::CreateEGLSurfaceForWidget(
|
| gfx::AcceleratedWidget widget) {
|
| - new_display_size_ = gfx::Size(widget >> 16, widget & 0xFFFF);
|
| - new_display_size_.SetToMax(GetMinDisplaySize());
|
| + // Verify requested widget dimensions match our current display size.
|
| + DCHECK_EQ(widget >> 16, display_size_.width());
|
| + DCHECK_EQ(widget & 0xffff, display_size_.height());
|
| return base::WrapUnique<SurfaceOzoneEGL>(new SurfaceOzoneEglCast(this));
|
| }
|
|
|
|
|