mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-12 01:23:33 +00:00
Update child objects to ref the device. This allows them to outlive the device, making the implementation more robust such that it is OK to drop the device before other objects. Dropping the last external reference to the device is currently an implicit device.destroy(). This destruction breaks possible ref cycles where the device refs internal objects which have a back ref to the device. Bug: dawn:1164 Change-Id: I02d8e32a21dcc5f05e531bd690baac4a234b5f6b Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/90360 Reviewed-by: Loko Kung <lokokung@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
32 lines
988 B
C++
32 lines
988 B
C++
// Copyright 2022 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "dawn/native/RefCountedWithExternalCount.h"
|
|
|
|
namespace dawn::native {
|
|
|
|
void RefCountedWithExternalCount::APIReference() {
|
|
mExternalRefCount.Increment();
|
|
RefCounted::APIReference();
|
|
}
|
|
|
|
void RefCountedWithExternalCount::APIRelease() {
|
|
if (mExternalRefCount.Decrement()) {
|
|
WillDropLastExternalRef();
|
|
}
|
|
RefCounted::APIRelease();
|
|
}
|
|
|
|
} // namespace dawn::native
|