Hash :
aa6dd50d
Author :
Date :
2020-02-03T17:10:58
Share scratch buffers between contexts. The Display now owns scratch buffers and loans them out to contexts while they are current. This allows us to to only allocate one scratch buffer in a single-threaded use case. Tick the scratch buffers every time a new context is made current. Lower the lifetime from 1000 to 64 to ensure that in the worst case, the buffers are cleared after not being used for ~1 second. BUG=chromium:1030835 BUG=angleproject:4363 Change-Id: I83552424e2beac62b9e41152876b04fc84f53692 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2031698 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Optional.h:
// Represents a type that may be invalid, similar to std::optional.
//
#ifndef COMMON_OPTIONAL_H_
#define COMMON_OPTIONAL_H_
#include <utility>
template <class T>
struct Optional
{
Optional() : mValid(false), mValue(T()) {}
Optional(const T &valueIn) : mValid(true), mValue(valueIn) {}
Optional(const Optional &other) : mValid(other.mValid), mValue(other.mValue) {}
Optional &operator=(const Optional &other)
{
this->mValid = other.mValid;
this->mValue = other.mValue;
return *this;
}
Optional &operator=(const T &value)
{
mValue = value;
mValid = true;
return *this;
}
Optional &operator=(T &&value)
{
mValue = std::move(value);
mValid = true;
return *this;
}
void reset() { mValid = false; }
T &&release()
{
mValid = false;
return std::move(mValue);
}
static Optional Invalid() { return Optional(); }
bool valid() const { return mValid; }
T &value() { return mValue; }
const T &value() const { return mValue; }
bool operator==(const Optional &other) const
{
return ((mValid == other.mValid) && (!mValid || (mValue == other.mValue)));
}
bool operator!=(const Optional &other) const { return !(*this == other); }
bool operator==(const T &value) const { return mValid && (mValue == value); }
bool operator!=(const T &value) const { return !(*this == value); }
private:
bool mValid;
T mValue;
};
#endif // COMMON_OPTIONAL_H_