Commit 55e24d64 authored by kylechar's avatar kylechar Committed by Commit Bot

Pass gfx::AcceleratedWidget by value.

The gfx::AcceleratedWidget StructTraits had it passed by reference
instead of value. The underlying type is always a primitive so it should
be passed by value. Update StructTraits and mojom implementations.

Change the StructTraits implementation to fail deserialization for
platforms that don't support sending AcceleratedWidgets over IPC. Also
change StructTraits unittest not to need a test interface, directly
serialize and then deserialize instead.

Bug: none
Change-Id: Iee82df75d248fe48f5478ca5251a08238707758e
Reviewed-on: https://chromium-review.googlesource.com/1110023Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarMichael Spang <spang@chromium.org>
Commit-Queue: kylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#569315}
parent 5b9084f8
...@@ -8,4 +8,6 @@ traits_headers = [ "//ui/gfx/mojo/accelerated_widget_struct_traits.h" ] ...@@ -8,4 +8,6 @@ traits_headers = [ "//ui/gfx/mojo/accelerated_widget_struct_traits.h" ]
public_deps = [ public_deps = [
"//ui/gfx", "//ui/gfx",
] ]
type_mappings = [ "gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget" ] type_mappings = [
"gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget[copyable_pass_by_value]",
]
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_ #ifndef UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_
#define UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_ #define UI_GFX_MOJO_ACCELERATED_WIDGET_STRUCT_TRAITS_H_
#include "build/build_config.h"
#include "ui/gfx/mojo/accelerated_widget.mojom.h" #include "ui/gfx/mojo/accelerated_widget.mojom.h"
#include "ui/gfx/native_widget_types.h" #include "ui/gfx/native_widget_types.h"
...@@ -13,33 +14,29 @@ namespace mojo { ...@@ -13,33 +14,29 @@ namespace mojo {
template <> template <>
struct StructTraits<gfx::mojom::AcceleratedWidgetDataView, struct StructTraits<gfx::mojom::AcceleratedWidgetDataView,
gfx::AcceleratedWidget> { gfx::AcceleratedWidget> {
static uint64_t widget(const gfx::AcceleratedWidget& widget) { static uint64_t widget(gfx::AcceleratedWidget widget) {
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
#if defined(OS_WIN) #if defined(OS_WIN)
return reinterpret_cast<uint64_t>(widget); return reinterpret_cast<uint64_t>(widget);
#else #elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
return static_cast<uint64_t>(widget); return static_cast<uint64_t>(widget);
#endif
#else #else
NOTIMPLEMENTED(); NOTREACHED();
return 0; return 0;
#endif #endif
} }
static bool Read(gfx::mojom::AcceleratedWidgetDataView data, static bool Read(gfx::mojom::AcceleratedWidgetDataView data,
gfx::AcceleratedWidget* out) { gfx::AcceleratedWidget* out) {
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
uint64_t w = data.widget();
#if defined(OS_WIN) #if defined(OS_WIN)
*out = reinterpret_cast<gfx::AcceleratedWidget>(w); *out = reinterpret_cast<gfx::AcceleratedWidget>(data.widget());
#else return true;
*out = static_cast<gfx::AcceleratedWidget>(w); #elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
#endif *out = static_cast<gfx::AcceleratedWidget>(data.widget());
return true;
#else #else
NOTIMPLEMENTED(); NOTREACHED();
*out = 0; return false;
#endif #endif
return true;
} }
}; };
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/mojo/accelerated_widget_struct_traits.h"
#include "ui/gfx/mojo/buffer_types_struct_traits.h" #include "ui/gfx/mojo/buffer_types_struct_traits.h"
#include "ui/gfx/mojo/presentation_feedback.mojom.h" #include "ui/gfx/mojo/presentation_feedback.mojom.h"
#include "ui/gfx/mojo/presentation_feedback_struct_traits.h" #include "ui/gfx/mojo/presentation_feedback_struct_traits.h"
...@@ -20,7 +21,7 @@ namespace gfx { ...@@ -20,7 +21,7 @@ namespace gfx {
namespace { namespace {
gfx::AcceleratedWidget castToAcceleratedWidget(int i) { gfx::AcceleratedWidget CastToAcceleratedWidget(int i) {
#if defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX) #if defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
return static_cast<gfx::AcceleratedWidget>(i); return static_cast<gfx::AcceleratedWidget>(i);
#else #else
...@@ -60,11 +61,6 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { ...@@ -60,11 +61,6 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
std::move(callback).Run(t); std::move(callback).Run(t);
} }
void EchoAcceleratedWidget(const AcceleratedWidget& t,
EchoAcceleratedWidgetCallback callback) override {
std::move(callback).Run(t);
}
void EchoGpuMemoryBufferHandle( void EchoGpuMemoryBufferHandle(
const GpuMemoryBufferHandle& handle, const GpuMemoryBufferHandle& handle,
EchoGpuMemoryBufferHandleCallback callback) override { EchoGpuMemoryBufferHandleCallback callback) override {
...@@ -141,18 +137,18 @@ TEST_F(StructTraitsTest, Transform) { ...@@ -141,18 +137,18 @@ TEST_F(StructTraitsTest, Transform) {
EXPECT_EQ(col4row4, output.matrix().get(3, 3)); EXPECT_EQ(col4row4, output.matrix().get(3, 3));
} }
// AcceleratedWidgets can only be sent between processes on X11, Ozone, Win // AcceleratedWidgets can only be sent between processes on some platforms.
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11) #if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11) || \
defined(OS_MACOSX)
#define MAYBE_AcceleratedWidget AcceleratedWidget #define MAYBE_AcceleratedWidget AcceleratedWidget
#else #else
#define MAYBE_AcceleratedWidget DISABLED_AcceleratedWidget #define MAYBE_AcceleratedWidget DISABLED_AcceleratedWidget
#endif #endif
TEST_F(StructTraitsTest, MAYBE_AcceleratedWidget) { TEST_F(StructTraitsTest, MAYBE_AcceleratedWidget) {
gfx::AcceleratedWidget input(castToAcceleratedWidget(1001)); gfx::AcceleratedWidget input(CastToAcceleratedWidget(1001));
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
gfx::AcceleratedWidget output; gfx::AcceleratedWidget output;
proxy->EchoAcceleratedWidget(input, &output); SerializeAndDeserialize<gfx::mojom::AcceleratedWidget>(input, &output);
EXPECT_EQ(input, output); EXPECT_EQ(input, output);
} }
......
...@@ -12,9 +12,6 @@ import "ui/gfx/mojo/transform.mojom"; ...@@ -12,9 +12,6 @@ import "ui/gfx/mojo/transform.mojom";
// All functions on this interface echo their arguments to test StructTraits // All functions on this interface echo their arguments to test StructTraits
// serialization and deserialization. // serialization and deserialization.
interface TraitsTestService { interface TraitsTestService {
[Sync]
EchoAcceleratedWidget(AcceleratedWidget w) => (AcceleratedWidget pass);
[Sync] [Sync]
EchoSelectionBound(SelectionBound s) => (SelectionBound pass); EchoSelectionBound(SelectionBound s) => (SelectionBound pass);
......
...@@ -238,24 +238,24 @@ void DrmThread::GetVSyncParameters( ...@@ -238,24 +238,24 @@ void DrmThread::GetVSyncParameters(
window->GetVSyncParameters(callback); window->GetVSyncParameters(callback);
} }
void DrmThread::CreateWindow(const gfx::AcceleratedWidget& widget) { void DrmThread::CreateWindow(gfx::AcceleratedWidget widget) {
std::unique_ptr<DrmWindow> window( std::unique_ptr<DrmWindow> window(
new DrmWindow(widget, device_manager_.get(), screen_manager_.get())); new DrmWindow(widget, device_manager_.get(), screen_manager_.get()));
window->Initialize(buffer_generator_.get()); window->Initialize(buffer_generator_.get());
screen_manager_->AddWindow(widget, std::move(window)); screen_manager_->AddWindow(widget, std::move(window));
} }
void DrmThread::DestroyWindow(const gfx::AcceleratedWidget& widget) { void DrmThread::DestroyWindow(gfx::AcceleratedWidget widget) {
std::unique_ptr<DrmWindow> window = screen_manager_->RemoveWindow(widget); std::unique_ptr<DrmWindow> window = screen_manager_->RemoveWindow(widget);
window->Shutdown(); window->Shutdown();
} }
void DrmThread::SetWindowBounds(const gfx::AcceleratedWidget& widget, void DrmThread::SetWindowBounds(gfx::AcceleratedWidget widget,
const gfx::Rect& bounds) { const gfx::Rect& bounds) {
screen_manager_->GetWindow(widget)->SetBounds(bounds); screen_manager_->GetWindow(widget)->SetBounds(bounds);
} }
void DrmThread::SetCursor(const gfx::AcceleratedWidget& widget, void DrmThread::SetCursor(gfx::AcceleratedWidget widget,
const std::vector<SkBitmap>& bitmaps, const std::vector<SkBitmap>& bitmaps,
const gfx::Point& location, const gfx::Point& location,
int32_t frame_delay_ms) { int32_t frame_delay_ms) {
...@@ -263,15 +263,15 @@ void DrmThread::SetCursor(const gfx::AcceleratedWidget& widget, ...@@ -263,15 +263,15 @@ void DrmThread::SetCursor(const gfx::AcceleratedWidget& widget,
->SetCursor(bitmaps, location, frame_delay_ms); ->SetCursor(bitmaps, location, frame_delay_ms);
} }
void DrmThread::MoveCursor(const gfx::AcceleratedWidget& widget, void DrmThread::MoveCursor(gfx::AcceleratedWidget widget,
const gfx::Point& location) { const gfx::Point& location) {
screen_manager_->GetWindow(widget)->MoveCursor(location); screen_manager_->GetWindow(widget)->MoveCursor(location);
} }
void DrmThread::CheckOverlayCapabilities( void DrmThread::CheckOverlayCapabilities(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays, const OverlaySurfaceCandidateList& overlays,
base::OnceCallback<void(const gfx::AcceleratedWidget&, base::OnceCallback<void(gfx::AcceleratedWidget,
const OverlaySurfaceCandidateList&, const OverlaySurfaceCandidateList&,
const OverlayStatusList&)> callback) { const OverlayStatusList&)> callback) {
TRACE_EVENT0("drm,hwoverlays", "DrmThread::CheckOverlayCapabilities"); TRACE_EVENT0("drm,hwoverlays", "DrmThread::CheckOverlayCapabilities");
......
...@@ -92,9 +92,9 @@ class DrmThread : public base::Thread, ...@@ -92,9 +92,9 @@ class DrmThread : public base::Thread,
// ozone::mojom::DrmDevice // ozone::mojom::DrmDevice
void StartDrmDevice(StartDrmDeviceCallback callback) override; void StartDrmDevice(StartDrmDeviceCallback callback) override;
void CreateWindow(const gfx::AcceleratedWidget& widget) override; void CreateWindow(gfx::AcceleratedWidget widget) override;
void DestroyWindow(const gfx::AcceleratedWidget& widget) override; void DestroyWindow(gfx::AcceleratedWidget widget) override;
void SetWindowBounds(const gfx::AcceleratedWidget& widget, void SetWindowBounds(gfx::AcceleratedWidget widget,
const gfx::Rect& bounds) override; const gfx::Rect& bounds) override;
void TakeDisplayControl(base::OnceCallback<void(bool)> callback) override; void TakeDisplayControl(base::OnceCallback<void(bool)> callback) override;
void RelinquishDisplayControl( void RelinquishDisplayControl(
...@@ -124,18 +124,18 @@ class DrmThread : public base::Thread, ...@@ -124,18 +124,18 @@ class DrmThread : public base::Thread,
const std::vector<display::GammaRampRGBEntry>& degamma_lut, const std::vector<display::GammaRampRGBEntry>& degamma_lut,
const std::vector<display::GammaRampRGBEntry>& gamma_lut) override; const std::vector<display::GammaRampRGBEntry>& gamma_lut) override;
void CheckOverlayCapabilities( void CheckOverlayCapabilities(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays, const OverlaySurfaceCandidateList& overlays,
base::OnceCallback<void(const gfx::AcceleratedWidget&, base::OnceCallback<void(gfx::AcceleratedWidget,
const OverlaySurfaceCandidateList&, const OverlaySurfaceCandidateList&,
const OverlayStatusList&)> callback) override; const OverlayStatusList&)> callback) override;
// ozone::mojom::DeviceCursor // ozone::mojom::DeviceCursor
void SetCursor(const gfx::AcceleratedWidget& widget, void SetCursor(gfx::AcceleratedWidget widget,
const std::vector<SkBitmap>& bitmaps, const std::vector<SkBitmap>& bitmaps,
const gfx::Point& location, const gfx::Point& location,
int32_t frame_delay_ms) override; int32_t frame_delay_ms) override;
void MoveCursor(const gfx::AcceleratedWidget& widget, void MoveCursor(gfx::AcceleratedWidget widget,
const gfx::Point& location) override; const gfx::Point& location) override;
// base::Thread: // base::Thread:
......
...@@ -249,7 +249,7 @@ void DrmThreadMessageProxy::OnSetGammaCorrection( ...@@ -249,7 +249,7 @@ void DrmThreadMessageProxy::OnSetGammaCorrection(
} }
void DrmThreadMessageProxy::OnCheckOverlayCapabilitiesCallback( void DrmThreadMessageProxy::OnCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& candidates, const OverlaySurfaceCandidateList& candidates,
const OverlayStatusList& returns) const { const OverlayStatusList& returns) const {
auto param_overlays = CreateParamsFromOverlaySurfaceCandidate(candidates); auto param_overlays = CreateParamsFromOverlaySurfaceCandidate(candidates);
......
...@@ -81,7 +81,7 @@ class DrmThreadMessageProxy : public IPC::MessageFilter, ...@@ -81,7 +81,7 @@ class DrmThreadMessageProxy : public IPC::MessageFilter,
const std::vector<display::GammaRampRGBEntry>& gamma_lut); const std::vector<display::GammaRampRGBEntry>& gamma_lut);
void OnCheckOverlayCapabilitiesCallback( void OnCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays, const OverlaySurfaceCandidateList& overlays,
const OverlayStatusList& returns) const; const OverlayStatusList& returns) const;
void OnRefreshNativeDisplaysCallback(MovableDisplaySnapshots displays) const; void OnRefreshNativeDisplaysCallback(MovableDisplaySnapshots displays) const;
......
...@@ -136,7 +136,7 @@ void DrmOverlayManager::SendOverlayValidationRequest( ...@@ -136,7 +136,7 @@ void DrmOverlayManager::SendOverlayValidationRequest(
} }
void DrmOverlayManager::GpuSentOverlayResult( void DrmOverlayManager::GpuSentOverlayResult(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& candidates, const OverlaySurfaceCandidateList& candidates,
const OverlayStatusList& returns) { const OverlayStatusList& returns) {
TRACE_EVENT_ASYNC_END0( TRACE_EVENT_ASYNC_END0(
......
...@@ -38,7 +38,7 @@ class DrmOverlayManager : public OverlayManagerOzone { ...@@ -38,7 +38,7 @@ class DrmOverlayManager : public OverlayManagerOzone {
// Communication-free implementations of actions performed in response to // Communication-free implementations of actions performed in response to
// messages from the GPU thread. // messages from the GPU thread.
void GpuSentOverlayResult(const gfx::AcceleratedWidget& widget, void GpuSentOverlayResult(gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& params, const OverlaySurfaceCandidateList& params,
const OverlayStatusList& returns); const OverlayStatusList& returns);
......
...@@ -338,7 +338,7 @@ bool HostDrmDevice::GpuSetGammaCorrection( ...@@ -338,7 +338,7 @@ bool HostDrmDevice::GpuSetGammaCorrection(
} }
void HostDrmDevice::GpuCheckOverlayCapabilitiesCallback( void HostDrmDevice::GpuCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays, const OverlaySurfaceCandidateList& overlays,
const OverlayStatusList& returns) const { const OverlayStatusList& returns) const {
DCHECK_CALLED_ON_VALID_THREAD(on_window_server_thread_); DCHECK_CALLED_ON_VALID_THREAD(on_window_server_thread_);
......
...@@ -121,7 +121,7 @@ class HostDrmDevice : public base::RefCountedThreadSafe<HostDrmDevice>, ...@@ -121,7 +121,7 @@ class HostDrmDevice : public base::RefCountedThreadSafe<HostDrmDevice>,
void RunObservers(); void RunObservers();
void GpuCheckOverlayCapabilitiesCallback( void GpuCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget, gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays, const OverlaySurfaceCandidateList& overlays,
const OverlayStatusList& returns) const; const OverlayStatusList& returns) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment