summaryrefslogtreecommitdiff
path: root/dom
diff options
context:
space:
mode:
Diffstat (limited to 'dom')
-rw-r--r--dom/base/nsDOMWindowUtils.cpp36
-rw-r--r--dom/interfaces/base/nsIDOMWindowUtils.idl9
-rw-r--r--dom/media/fmp4/MP4Decoder.cpp56
-rw-r--r--dom/media/fmp4/MP4Decoder.h3
4 files changed, 29 insertions, 75 deletions
diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp
index 7bac1c22a..e62344601 100644
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -106,7 +106,6 @@
#include "nsCSSPseudoElements.h" // for CSSPseudoElementType
#include "nsNetUtil.h"
#include "mozilla/layers/APZCTreeManager.h" // for layers::ZoomToRectBehavior
-#include "mozilla/dom/Promise.h"
#include "mozilla/StyleSheetInlines.h"
#include "mozilla/gfx/GPUProcessManager.h"
@@ -2333,34 +2332,31 @@ nsDOMWindowUtils::GetLayerManagerRemote(bool* retval)
}
NS_IMETHODIMP
-nsDOMWindowUtils::GetSupportsHardwareH264Decoding(JS::MutableHandle<JS::Value> aPromise)
+nsDOMWindowUtils::GetSupportsHardwareH264Decoding(nsAString& aRetval)
{
- nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryReferent(mWindow);
- NS_ENSURE_STATE(window);
- nsCOMPtr<nsIGlobalObject> parentObject =
- do_QueryInterface(window->GetCurrentInnerWindow());
- NS_ENSURE_STATE(parentObject);
#ifdef MOZ_FMP4
nsCOMPtr<nsIWidget> widget = GetWidget();
- NS_ENSURE_STATE(widget);
+ if (!widget)
+ return NS_ERROR_FAILURE;
+
LayerManager *mgr = widget->GetLayerManager();
- NS_ENSURE_STATE(mgr);
- RefPtr<Promise> promise =
- MP4Decoder::IsVideoAccelerated(mgr->AsShadowForwarder(), parentObject);
- NS_ENSURE_STATE(promise);
- aPromise.setObject(*promise->PromiseObj());
-#else
- ErrorResult rv;
- RefPtr<Promise> promise = Promise::Create(parentObject, rv);
- if (rv.Failed()) {
- return rv.StealNSResult();
+ if (!mgr)
+ return NS_ERROR_FAILURE;
+
+ nsCString failureReason;
+ if (MP4Decoder::IsVideoAccelerated(mgr->AsShadowForwarder(), failureReason)) {
+ aRetval.AssignLiteral("Yes");
+ } else {
+ aRetval.AssignLiteral("No; ");
+ AppendUTF8toUTF16(failureReason, aRetval);
}
- promise->MaybeResolve(NS_LITERAL_STRING("No; Compiled without MP4 support."));
- aPromise.setObject(*promise->PromiseObj());
+#else
+ aRetval.AssignLiteral("No; Compiled without MP4 support.");
#endif
return NS_OK;
}
+
NS_IMETHODIMP
nsDOMWindowUtils::GetCurrentAudioBackend(nsAString& aBackend)
{
diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl
index 8293c6c86..548214adc 100644
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -50,7 +50,7 @@ interface nsIJSRAIIHelper;
interface nsIContentPermissionRequest;
interface nsIObserver;
-[scriptable, uuid(7fcc7958-77d9-45ff-8c81-277bde5f0dc8)]
+[scriptable, uuid(e23b3d3a-aa0c-4433-acab-07d4d25c1cc7)]
interface nsIDOMWindowUtils : nsISupports {
/**
@@ -1414,12 +1414,11 @@ interface nsIDOMWindowUtils : nsISupports {
readonly attribute boolean layerManagerRemote;
/**
- * Returns a Promise that will be resolved with a string once the capabilities
- * of the h264 decoder have been determined.
- * Success does not mean that all h264 video decoding will be done
+ * True if we can initialize a hardware-backed h264 decoder for a simple
+ * test video, does not mean that all h264 video decoding will be done
* in hardware.
*/
- readonly attribute jsval supportsHardwareH264Decoding;
+ readonly attribute AString supportsHardwareH264Decoding;
/**
* Returns the current audio backend as a free-form string.
diff --git a/dom/media/fmp4/MP4Decoder.cpp b/dom/media/fmp4/MP4Decoder.cpp
index 9b0886e74..c0c954198 100644
--- a/dom/media/fmp4/MP4Decoder.cpp
+++ b/dom/media/fmp4/MP4Decoder.cpp
@@ -248,58 +248,18 @@ CreateTestH264Decoder(layers::KnowsCompositor* aKnowsCompositor,
return decoder.forget();
}
-/* static */ already_AddRefed<dom::Promise>
-MP4Decoder::IsVideoAccelerated(layers::KnowsCompositor* aKnowsCompositor, nsIGlobalObject* aParent)
+/* static */ bool
+MP4Decoder::IsVideoAccelerated(layers::KnowsCompositor* aKnowsCompositor, nsACString& aFailureReason)
{
- MOZ_ASSERT(NS_IsMainThread());
-
- ErrorResult rv;
- RefPtr<dom::Promise> promise;
- promise = dom::Promise::Create(aParent, rv);
- if (rv.Failed()) {
- rv.SuppressException();
- return nullptr;
- }
-
- RefPtr<TaskQueue> taskQueue =
- new TaskQueue(GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER));
VideoInfo config;
- RefPtr<MediaDataDecoder> decoder(CreateTestH264Decoder(aKnowsCompositor, config, taskQueue));
+ RefPtr<MediaDataDecoder> decoder(CreateTestH264Decoder(aKnowsCompositor, config, nullptr));
if (!decoder) {
- taskQueue->BeginShutdown();
- taskQueue->AwaitShutdownAndIdle();
- promise->MaybeResolve(NS_LITERAL_STRING("No; Failed to create H264 decoder"));
- return promise.forget();
+ aFailureReason.AssignLiteral("Failed to create H264 decoder");
+ return false;
}
-
- decoder->Init()
- ->Then(AbstractThread::MainThread(), __func__,
- [promise, decoder, taskQueue] (TrackInfo::TrackType aTrack) {
- nsCString failureReason;
- bool ok = decoder->IsHardwareAccelerated(failureReason);
- nsAutoString result;
- if (ok) {
- result.AssignLiteral("Yes");
- } else {
- result.AssignLiteral("No");
- }
- if (failureReason.Length()) {
- result.AppendLiteral("; ");
- AppendUTF8toUTF16(failureReason, result);
- }
- decoder->Shutdown();
- taskQueue->BeginShutdown();
- taskQueue->AwaitShutdownAndIdle();
- promise->MaybeResolve(result);
- },
- [promise, decoder, taskQueue] (MediaResult aError) {
- decoder->Shutdown();
- taskQueue->BeginShutdown();
- taskQueue->AwaitShutdownAndIdle();
- promise->MaybeResolve(NS_LITERAL_STRING("No; Failed to initialize H264 decoder"));
- });
-
- return promise.forget();
+ bool result = decoder->IsHardwareAccelerated(aFailureReason);
+ decoder->Shutdown();
+ return result;
}
void
diff --git a/dom/media/fmp4/MP4Decoder.h b/dom/media/fmp4/MP4Decoder.h
index ad5fba7b5..def4b4f99 100644
--- a/dom/media/fmp4/MP4Decoder.h
+++ b/dom/media/fmp4/MP4Decoder.h
@@ -48,8 +48,7 @@ public:
// Returns true if the MP4 backend is preffed on.
static bool IsEnabled();
- static already_AddRefed<dom::Promise>
- IsVideoAccelerated(layers::KnowsCompositor* aKnowsCompositor, nsIGlobalObject* aParent);
+ static bool IsVideoAccelerated(layers::KnowsCompositor* aKnowsCompositor, nsACString& aFailureReason);
void GetMozDebugReaderData(nsAString& aString) override;