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

Unified Diff: components/arc/arc_bridge_service_impl.cc

Issue 1451353002: Implement GpuArcVideoService for arc video accelerator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased with new ArcBridgeService; addressed Owen's comments Created 5 years 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: components/arc/arc_bridge_service_impl.cc
diff --git a/components/arc/arc_bridge_service_impl.cc b/components/arc/arc_bridge_service_impl.cc
index ddd1b6aeb8aaa59269115aa640f56a0d8e0305f5..4fed8a6ef48d8b2204aae9430ccab0a29221c955 100644
--- a/components/arc/arc_bridge_service_impl.cc
+++ b/components/arc/arc_bridge_service_impl.cc
@@ -17,6 +17,7 @@
#include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h"
+#include "ipc/ipc_channel_handle.h"
#include "mojo/public/cpp/bindings/array.h"
#include "third_party/mojo/src/mojo/edk/embedder/embedder.h"
@@ -160,6 +161,33 @@ bool ArcBridgeServiceImpl::RequestAppIcon(const std::string& package,
return true;
}
+bool ArcBridgeServiceImpl::NotifyVideoAcceleratorChannelCreated(
+ const IPC::ChannelHandle& handle) {
Pawel Osciak 2015/12/16 10:17:58 Do we need to verify that handle is not IPC::Chann
kcwu 2015/12/16 14:05:32 Why? Both ArcBridgeServiceImpl and GpuArcVideoServ
Pawel Osciak 2015/12/23 06:24:01 Yes, but if creation failed we may get an empty ha
kcwu 2015/12/23 09:09:43 No, I want to let the remote caller handle the fai
+ DCHECK(CalledOnValidThread());
+ if (state() != State::READY) {
+ LOG(ERROR) << "Called NotifyVideoAcceleratorChannelCreated when the "
+ "service is not ready";
+ return false;
+ }
+ // TODO revisit before commit:
+ // will the handle be closed exactly once?
+ // can mojo create wrapper for invalid handle?
+ MojoHandle wrapped_handle;
+ MojoResult wrap_result = mojo::embedder::CreatePlatformHandleWrapper(
+ mojo::embedder::ScopedPlatformHandle(
+ mojo::embedder::PlatformHandle(handle.socket.fd)),
+ &wrapped_handle);
+ if (wrap_result != MOJO_RESULT_OK) {
+ LOG(WARNING) << "Pipe failed to wrap handles. Closing: " << wrap_result;
+ // Defer closing task to the ScopedFD.
+ base::ScopedFD(handle.socket.fd);
+ return false;
Pawel Osciak 2015/12/16 10:17:58 Do we need to close also before returning from l.1
kcwu 2015/12/16 14:05:32 No need to close since it is already wrapped into
+ }
+ instance_ptr_->NotifyVideoAcceleratorChannelCreated(
+ mojo::ScopedHandle(mojo::Handle(wrapped_handle)));
+ return true;
+}
+
void ArcBridgeServiceImpl::OnInstanceBootPhase(InstanceBootPhase phase) {
DCHECK(CalledOnValidThread());
// The state can be CONNECTED the first time this is called, and will then
@@ -215,6 +243,12 @@ void ArcBridgeServiceImpl::OnReleaseDisplayWakeLock(DisplayWakeLockType type) {
VLOG(1) << "OnReleaseDisplayWakeLock";
}
+void ArcBridgeServiceImpl::OnRequestArcVideoAcceleratorChannel() {
+ DCHECK(CalledOnValidThread());
+ FOR_EACH_OBSERVER(VideoServiceObserver, video_service_observer_list(),
+ OnRequestArcVideoAcceleratorChannel());
+}
+
void ArcBridgeServiceImpl::OnArcAvailable(bool arc_available) {
DCHECK(CalledOnValidThread());
if (available() == arc_available)

Powered by Google App Engine
This is Rietveld 408576698