summaryrefslogtreecommitdiffstats
path: root/gfx/layers/ipc/LayerTransactionChild.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/ipc/LayerTransactionChild.cpp')
-rw-r--r--gfx/layers/ipc/LayerTransactionChild.cpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/gfx/layers/ipc/LayerTransactionChild.cpp b/gfx/layers/ipc/LayerTransactionChild.cpp
new file mode 100644
index 000000000..8b60d3b51
--- /dev/null
+++ b/gfx/layers/ipc/LayerTransactionChild.cpp
@@ -0,0 +1,87 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * vim: sw=2 ts=8 et :
+ */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "LayerTransactionChild.h"
+#include "mozilla/gfx/Logging.h"
+#include "mozilla/layers/CompositableChild.h"
+#include "mozilla/layers/PCompositableChild.h" // for PCompositableChild
+#include "mozilla/layers/PLayerChild.h" // for PLayerChild
+#include "mozilla/layers/PImageContainerChild.h"
+#include "mozilla/layers/ShadowLayers.h" // for ShadowLayerForwarder
+#include "mozilla/mozalloc.h" // for operator delete, etc
+#include "nsDebug.h" // for NS_RUNTIMEABORT, etc
+#include "nsTArray.h" // for nsTArray
+#include "mozilla/layers/TextureClient.h"
+
+namespace mozilla {
+namespace layers {
+
+
+void
+LayerTransactionChild::Destroy()
+{
+ if (!IPCOpen()) {
+ return;
+ }
+ // mDestroyed is used to prevent calling Send__delete__() twice.
+ // When this function is called from CompositorBridgeChild::Destroy(),
+ // under Send__delete__() call, this function is called from
+ // ShadowLayerForwarder's destructor.
+ // When it happens, IPCOpen() is still true.
+ // See bug 1004191.
+ mDestroyed = true;
+
+ SendShutdown();
+}
+
+
+PLayerChild*
+LayerTransactionChild::AllocPLayerChild()
+{
+ // we always use the "power-user" ctor
+ NS_RUNTIMEABORT("not reached");
+ return nullptr;
+}
+
+bool
+LayerTransactionChild::DeallocPLayerChild(PLayerChild* actor)
+{
+ delete actor;
+ return true;
+}
+
+PCompositableChild*
+LayerTransactionChild::AllocPCompositableChild(const TextureInfo& aInfo)
+{
+ MOZ_ASSERT(!mDestroyed);
+ return CompositableChild::CreateActor();
+}
+
+bool
+LayerTransactionChild::DeallocPCompositableChild(PCompositableChild* actor)
+{
+ CompositableChild::DestroyActor(actor);
+ return true;
+}
+
+void
+LayerTransactionChild::ActorDestroy(ActorDestroyReason why)
+{
+ mDestroyed = true;
+#ifdef MOZ_B2G
+ // Due to poor lifetime management of gralloc (and possibly shmems) we will
+ // crash at some point in the future when we get destroyed due to abnormal
+ // shutdown. Its better just to crash here. On desktop though, we have a chance
+ // of recovering.
+ if (why == AbnormalShutdown) {
+ NS_RUNTIMEABORT("ActorDestroy by IPC channel failure at LayerTransactionChild");
+ }
+#endif
+}
+
+} // namespace layers
+} // namespace mozilla