gfx/webrender_bindings/RenderTextureHostWrapper.cpp
author Ehsan Akhgari <ehsan@mozilla.com>
Fri, 22 Feb 2019 14:25:04 +0000
changeset 460581 045d790ca417fc6e827b57eef8ec5aea2beef81a
parent 459753 73b8e1b4433407456a983b37a864ad959fe428ff
permissions -rw-r--r--
Bug 1529780 - Compute ImageCacheKey's hash number lazily; r=tnikkel Differential Revision: https://phabricator.services.mozilla.com/D20746

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 "RenderTextureHostWrapper.h"

#include "mozilla/gfx/Logging.h"
#include "mozilla/layers/ImageDataSerializer.h"
#include "mozilla/layers/SourceSurfaceSharedData.h"
#include "mozilla/webrender/RenderThread.h"

namespace mozilla {
namespace wr {

RenderTextureHostWrapper::RenderTextureHostWrapper()
    : mInited(false), mLocked(false) {
  MOZ_COUNT_CTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
}

RenderTextureHostWrapper::~RenderTextureHostWrapper() {
  MOZ_COUNT_DTOR_INHERITED(RenderTextureHostWrapper, RenderTextureHost);
}

wr::WrExternalImage RenderTextureHostWrapper::Lock(
    uint8_t aChannelIndex, gl::GLContext* aGL, wr::ImageRendering aRendering) {
  if (!mTextureHost) {
    MOZ_ASSERT_UNREACHABLE("unexpected to happen");
    return InvalidToWrExternalImage();
  }

  mLocked = true;
  return mTextureHost->Lock(aChannelIndex, aGL, aRendering);
}

void RenderTextureHostWrapper::Unlock() {
  if (mTextureHost) {
    mTextureHost->Unlock();
  }
  mLocked = false;
}

void RenderTextureHostWrapper::ClearCachedResources() {
  if (mTextureHost) {
    mTextureHost->ClearCachedResources();
  }
}

void RenderTextureHostWrapper::UpdateRenderTextureHost(
    RenderTextureHost* aTextureHost) {
  MOZ_ASSERT(RenderThread::IsInRenderThread());
  MOZ_RELEASE_ASSERT(!mLocked);

  mInited = true;
  mTextureHost = aTextureHost;
}

}  // namespace wr
}  // namespace mozilla