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" ]
public_deps = [
"//ui/gfx",
]
type_mappings = [ "gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget" ]
type_mappings = [
"gfx.mojom.AcceleratedWidget=gfx::AcceleratedWidget[copyable_pass_by_value]",
]
......@@ -5,6 +5,7 @@
#ifndef 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/native_widget_types.h"
......@@ -13,33 +14,29 @@ namespace mojo {
template <>
struct StructTraits<gfx::mojom::AcceleratedWidgetDataView,
gfx::AcceleratedWidget> {
static uint64_t widget(const gfx::AcceleratedWidget& widget) {
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
static uint64_t widget(gfx::AcceleratedWidget widget) {
#if defined(OS_WIN)
return reinterpret_cast<uint64_t>(widget);
#else
#elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
return static_cast<uint64_t>(widget);
#endif
#else
NOTIMPLEMENTED();
NOTREACHED();
return 0;
#endif
}
static bool Read(gfx::mojom::AcceleratedWidgetDataView data,
gfx::AcceleratedWidget* out) {
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
uint64_t w = data.widget();
#if defined(OS_WIN)
*out = reinterpret_cast<gfx::AcceleratedWidget>(w);
#else
*out = static_cast<gfx::AcceleratedWidget>(w);
#endif
*out = reinterpret_cast<gfx::AcceleratedWidget>(data.widget());
return true;
#elif defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
*out = static_cast<gfx::AcceleratedWidget>(data.widget());
return true;
#else
NOTIMPLEMENTED();
*out = 0;
NOTREACHED();
return false;
#endif
return true;
}
};
......
......@@ -8,6 +8,7 @@
#include "build/build_config.h"
#include "mojo/public/cpp/bindings/binding_set.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/presentation_feedback.mojom.h"
#include "ui/gfx/mojo/presentation_feedback_struct_traits.h"
......@@ -20,7 +21,7 @@ namespace gfx {
namespace {
gfx::AcceleratedWidget castToAcceleratedWidget(int i) {
gfx::AcceleratedWidget CastToAcceleratedWidget(int i) {
#if defined(USE_OZONE) || defined(USE_X11) || defined(OS_MACOSX)
return static_cast<gfx::AcceleratedWidget>(i);
#else
......@@ -60,11 +61,6 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
std::move(callback).Run(t);
}
void EchoAcceleratedWidget(const AcceleratedWidget& t,
EchoAcceleratedWidgetCallback callback) override {
std::move(callback).Run(t);
}
void EchoGpuMemoryBufferHandle(
const GpuMemoryBufferHandle& handle,
EchoGpuMemoryBufferHandleCallback callback) override {
......@@ -141,18 +137,18 @@ TEST_F(StructTraitsTest, Transform) {
EXPECT_EQ(col4row4, output.matrix().get(3, 3));
}
// AcceleratedWidgets can only be sent between processes on X11, Ozone, Win
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11)
// AcceleratedWidgets can only be sent between processes on some platforms.
#if defined(OS_WIN) || defined(USE_OZONE) || defined(USE_X11) || \
defined(OS_MACOSX)
#define MAYBE_AcceleratedWidget AcceleratedWidget
#else
#define MAYBE_AcceleratedWidget DISABLED_AcceleratedWidget
#endif
TEST_F(StructTraitsTest, MAYBE_AcceleratedWidget) {
gfx::AcceleratedWidget input(castToAcceleratedWidget(1001));
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
gfx::AcceleratedWidget input(CastToAcceleratedWidget(1001));
gfx::AcceleratedWidget output;
proxy->EchoAcceleratedWidget(input, &output);
SerializeAndDeserialize<gfx::mojom::AcceleratedWidget>(input, &output);
EXPECT_EQ(input, output);
}
......
......@@ -12,9 +12,6 @@ import "ui/gfx/mojo/transform.mojom";
// All functions on this interface echo their arguments to test StructTraits
// serialization and deserialization.
interface TraitsTestService {
[Sync]
EchoAcceleratedWidget(AcceleratedWidget w) => (AcceleratedWidget pass);
[Sync]
EchoSelectionBound(SelectionBound s) => (SelectionBound pass);
......
......@@ -238,24 +238,24 @@ void DrmThread::GetVSyncParameters(
window->GetVSyncParameters(callback);
}
void DrmThread::CreateWindow(const gfx::AcceleratedWidget& widget) {
void DrmThread::CreateWindow(gfx::AcceleratedWidget widget) {
std::unique_ptr<DrmWindow> window(
new DrmWindow(widget, device_manager_.get(), screen_manager_.get()));
window->Initialize(buffer_generator_.get());
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);
window->Shutdown();
}
void DrmThread::SetWindowBounds(const gfx::AcceleratedWidget& widget,
void DrmThread::SetWindowBounds(gfx::AcceleratedWidget widget,
const gfx::Rect& 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 gfx::Point& location,
int32_t frame_delay_ms) {
......@@ -263,15 +263,15 @@ void DrmThread::SetCursor(const gfx::AcceleratedWidget& widget,
->SetCursor(bitmaps, location, frame_delay_ms);
}
void DrmThread::MoveCursor(const gfx::AcceleratedWidget& widget,
void DrmThread::MoveCursor(gfx::AcceleratedWidget widget,
const gfx::Point& location) {
screen_manager_->GetWindow(widget)->MoveCursor(location);
}
void DrmThread::CheckOverlayCapabilities(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays,
base::OnceCallback<void(const gfx::AcceleratedWidget&,
base::OnceCallback<void(gfx::AcceleratedWidget,
const OverlaySurfaceCandidateList&,
const OverlayStatusList&)> callback) {
TRACE_EVENT0("drm,hwoverlays", "DrmThread::CheckOverlayCapabilities");
......
......@@ -92,9 +92,9 @@ class DrmThread : public base::Thread,
// ozone::mojom::DrmDevice
void StartDrmDevice(StartDrmDeviceCallback callback) override;
void CreateWindow(const gfx::AcceleratedWidget& widget) override;
void DestroyWindow(const gfx::AcceleratedWidget& widget) override;
void SetWindowBounds(const gfx::AcceleratedWidget& widget,
void CreateWindow(gfx::AcceleratedWidget widget) override;
void DestroyWindow(gfx::AcceleratedWidget widget) override;
void SetWindowBounds(gfx::AcceleratedWidget widget,
const gfx::Rect& bounds) override;
void TakeDisplayControl(base::OnceCallback<void(bool)> callback) override;
void RelinquishDisplayControl(
......@@ -124,18 +124,18 @@ class DrmThread : public base::Thread,
const std::vector<display::GammaRampRGBEntry>& degamma_lut,
const std::vector<display::GammaRampRGBEntry>& gamma_lut) override;
void CheckOverlayCapabilities(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays,
base::OnceCallback<void(const gfx::AcceleratedWidget&,
base::OnceCallback<void(gfx::AcceleratedWidget,
const OverlaySurfaceCandidateList&,
const OverlayStatusList&)> callback) override;
// ozone::mojom::DeviceCursor
void SetCursor(const gfx::AcceleratedWidget& widget,
void SetCursor(gfx::AcceleratedWidget widget,
const std::vector<SkBitmap>& bitmaps,
const gfx::Point& location,
int32_t frame_delay_ms) override;
void MoveCursor(const gfx::AcceleratedWidget& widget,
void MoveCursor(gfx::AcceleratedWidget widget,
const gfx::Point& location) override;
// base::Thread:
......
......@@ -249,7 +249,7 @@ void DrmThreadMessageProxy::OnSetGammaCorrection(
}
void DrmThreadMessageProxy::OnCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& candidates,
const OverlayStatusList& returns) const {
auto param_overlays = CreateParamsFromOverlaySurfaceCandidate(candidates);
......
......@@ -81,7 +81,7 @@ class DrmThreadMessageProxy : public IPC::MessageFilter,
const std::vector<display::GammaRampRGBEntry>& gamma_lut);
void OnCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays,
const OverlayStatusList& returns) const;
void OnRefreshNativeDisplaysCallback(MovableDisplaySnapshots displays) const;
......
......@@ -136,7 +136,7 @@ void DrmOverlayManager::SendOverlayValidationRequest(
}
void DrmOverlayManager::GpuSentOverlayResult(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& candidates,
const OverlayStatusList& returns) {
TRACE_EVENT_ASYNC_END0(
......
......@@ -38,7 +38,7 @@ class DrmOverlayManager : public OverlayManagerOzone {
// Communication-free implementations of actions performed in response to
// messages from the GPU thread.
void GpuSentOverlayResult(const gfx::AcceleratedWidget& widget,
void GpuSentOverlayResult(gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& params,
const OverlayStatusList& returns);
......
......@@ -338,7 +338,7 @@ bool HostDrmDevice::GpuSetGammaCorrection(
}
void HostDrmDevice::GpuCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays,
const OverlayStatusList& returns) const {
DCHECK_CALLED_ON_VALID_THREAD(on_window_server_thread_);
......
......@@ -121,7 +121,7 @@ class HostDrmDevice : public base::RefCountedThreadSafe<HostDrmDevice>,
void RunObservers();
void GpuCheckOverlayCapabilitiesCallback(
const gfx::AcceleratedWidget& widget,
gfx::AcceleratedWidget widget,
const OverlaySurfaceCandidateList& overlays,
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