LOG(ERROR) << "Write access still active";
return false;
} else if (mode_ == RepresentationAccessMode::kRead) {
- LOG(ERROR) << "Read/write access twice";
+ if (mode == GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM) {
+ DCHECK_GT(readers_cnt_, 0);
+ ++readers_cnt_;
+ return true;
+ }
+
+ LOG(ERROR) << "Write access while reader(s) still active.";
return false;
}
switch (mode) {
case GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM:
mode_ = RepresentationAccessMode::kRead;
+ DCHECK_EQ(readers_cnt_, 0);
+ readers_cnt_ = 1;
if (write_fence_) {
write_fence_->ServerWait();
write_fence_.reset();
void SharedImageBackingEfl::EndAccess() {
switch (mode_) {
case RepresentationAccessMode::kRead:
+ DCHECK_GT(readers_cnt_, 0);
+ --readers_cnt_;
+ if (readers_cnt_ > 0) {
+ // Readers still active.
+ return;
+ }
read_fence_ = gl::GLFenceEGL::Create();
break;
case RepresentationAccessMode::kWrite: