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

Unified Diff: content/browser/browser_io_surface_manager_mac_unittest.cc

Issue 1137453002: content: Pass IOSurface references using Mach IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rsesek's review Created 5 years, 7 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/browser_io_surface_manager_mac_unittest.cc
diff --git a/content/browser/browser_io_surface_manager_mac_unittest.cc b/content/browser/browser_io_surface_manager_mac_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b37130ce019ecc7eac02178f97ebce9f91928c4d
--- /dev/null
+++ b/content/browser/browser_io_surface_manager_mac_unittest.cc
@@ -0,0 +1,194 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/browser_io_surface_manager_mac.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace content {
+
+class BrowserIOSurfaceManagerTest : public testing::Test {
+ public:
+ void EnsureRunning() { io_surface_manager_.EnsureRunning(); }
+
+ IOSurfaceManagerToken GetGpuProcessToken() const {
+ return io_surface_manager_.GetGpuProcessToken();
+ }
+
+ IOSurfaceManagerToken GenerateChildProcessToken(int child_process_id) {
+ return io_surface_manager_.GenerateChildProcessToken(child_process_id);
+ }
+
+ void InvalidateChildProcessToken(const IOSurfaceManagerToken& token) {
+ io_surface_manager_.InvalidateChildProcessToken(token);
+ }
+
+ bool HandleRegisterIOSurfaceRequest(
+ const IOSurfaceManagerHostMsg_RegisterIOSurface& request,
+ IOSurfaceManagerMsg_RegisterIOSurfaceReply* reply) {
+ return io_surface_manager_.HandleRegisterIOSurfaceRequest(request, reply);
+ }
+
+ bool HandleUnregisterIOSurfaceRequest(
+ const IOSurfaceManagerHostMsg_UnregisterIOSurface& request) {
+ return io_surface_manager_.HandleUnregisterIOSurfaceRequest(request);
+ }
+
+ bool HandleAcquireIOSurfaceRequest(
+ const IOSurfaceManagerHostMsg_AcquireIOSurface& request,
+ IOSurfaceManagerMsg_AcquireIOSurfaceReply* reply) {
+ return io_surface_manager_.HandleAcquireIOSurfaceRequest(request, reply);
+ }
+
+ private:
+ BrowserIOSurfaceManager io_surface_manager_;
+};
+
+TEST_F(BrowserIOSurfaceManagerTest, EnsureRunning) {
+ EnsureRunning();
+ base::mac::ScopedMachSendRight service_port =
+ BrowserIOSurfaceManager::LookupServicePort(getpid());
+ EXPECT_TRUE(service_port.is_valid());
+}
+
+TEST_F(BrowserIOSurfaceManagerTest, IOSurfaceRegistration) {
+ const int kIOSurfaceId = 1;
+ const int kClientId = 1;
+
+ IOSurfaceManagerToken child_process_token =
+ GenerateChildProcessToken(kClientId);
+
+ {
+ IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
+ IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
+
+ request.io_surface_id = kIOSurfaceId;
+ request.client_id = kClientId;
+
+ // Fails as request doesn't contain valid token.
+ EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
+
+ memcpy(request.token_name, child_process_token.name,
+ sizeof(child_process_token.name));
+ // Fails as child process is not allowed to register IOSurfaces.
+ EXPECT_FALSE(HandleRegisterIOSurfaceRequest(request, &reply));
+
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
+ memcpy(request.token_name, gpu_process_token.name,
+ sizeof(gpu_process_token.name));
+ EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
+ EXPECT_TRUE(reply.result);
+ }
Robert Sesek 2015/05/28 18:25:11 Since there's not much shared setup between these
reveman 2015/05/29 00:09:02 Done.
Robert Sesek 2015/06/01 21:58:06 Really? There's still a bunch of different test ca
reveman 2015/06/02 22:48:07 Sorry, misunderstood your previous comment. Though
+
+ {
+ IOSurfaceManagerHostMsg_UnregisterIOSurface request = {{0}};
+
+ request.io_surface_id = kIOSurfaceId;
+ request.client_id = kClientId;
+
+ // Fails as request doesn't contain valid GPU token.
+ EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
+
+ memcpy(request.token_name, child_process_token.name,
+ sizeof(child_process_token.name));
+ // Fails as child process is not allowed to unregister IOSurfaces.
+ EXPECT_FALSE(HandleUnregisterIOSurfaceRequest(request));
+
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
+ memcpy(request.token_name, gpu_process_token.name,
+ sizeof(gpu_process_token.name));
+ EXPECT_TRUE(HandleUnregisterIOSurfaceRequest(request));
+ }
+}
+
+TEST_F(BrowserIOSurfaceManagerTest, AcquireIOSurface) {
+ const int kIOSurfaceId1 = 10;
+ const int kIOSurfaceId2 = 20;
+ const int kClientId1 = 1;
+ const int kClientId2 = 2;
+ const mach_port_t kIOSurfacePortId1 = 100u;
+ const mach_port_t kIOSurfacePortId2 = 200u;
+
+ IOSurfaceManagerToken child_process_token1 =
+ GenerateChildProcessToken(kClientId1);
+ IOSurfaceManagerToken child_process_token2 =
+ GenerateChildProcessToken(kClientId2);
+
+ {
+ IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
+ IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
+
+ // Register IOSurface for use by kClientId1.
+ request.io_surface_id = kIOSurfaceId1;
+ request.client_id = kClientId1;
+ request.io_surface_port.name = kIOSurfacePortId1;
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
+ memcpy(request.token_name, gpu_process_token.name,
+ sizeof(gpu_process_token.name));
+ EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
+ EXPECT_TRUE(reply.result);
+ }
+
+ {
+ IOSurfaceManagerHostMsg_RegisterIOSurface request = {{0}};
+ IOSurfaceManagerMsg_RegisterIOSurfaceReply reply = {{0}};
+
+ // Register IOSurface for use by kClientId2.
+ request.io_surface_id = kIOSurfaceId2;
+ request.client_id = kClientId2;
+ request.io_surface_port.name = kIOSurfacePortId2;
+ IOSurfaceManagerToken gpu_process_token = GetGpuProcessToken();
+ memcpy(request.token_name, gpu_process_token.name,
+ sizeof(gpu_process_token.name));
+ EXPECT_TRUE(HandleRegisterIOSurfaceRequest(request, &reply));
+ EXPECT_TRUE(reply.result);
+ }
+
+ {
+ IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
+ IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
+
+ request.io_surface_id = kIOSurfaceId2;
+
+ // Fails as request doesn't contain valid token.
+ EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
+
+ memcpy(request.token_name, child_process_token1.name,
+ sizeof(child_process_token1.name));
+ // Fails as child process 1 is not allowed to acquire this IOSurface.
+ EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
+
+ request.io_surface_id = kIOSurfaceId1;
+ EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
+ EXPECT_EQ(kIOSurfacePortId1, reply.io_surface_port.name);
+ }
+
+ {
+ IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
+ IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
+
+ request.io_surface_id = kIOSurfaceId2;
+
+ memcpy(request.token_name, child_process_token2.name,
+ sizeof(child_process_token2.name));
+ EXPECT_TRUE(HandleAcquireIOSurfaceRequest(request, &reply));
+ EXPECT_EQ(kIOSurfacePortId2, reply.io_surface_port.name);
+ }
+
+ InvalidateChildProcessToken(child_process_token2);
+
+ {
+ IOSurfaceManagerHostMsg_AcquireIOSurface request = {{0}};
+ IOSurfaceManagerMsg_AcquireIOSurfaceReply reply = {{0}};
+
+ request.io_surface_id = kIOSurfaceId2;
+
+ memcpy(request.token_name, child_process_token2.name,
+ sizeof(child_process_token2.name));
+ // Fails as as token is no longer valid.
+ EXPECT_FALSE(HandleAcquireIOSurfaceRequest(request, &reply));
+ }
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698