Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f89ebde authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru Committed by android code review
Browse files

Merge "EGL: do not use sparse files for shader"

parents db1597a9 a30cc7db
Loading
Loading
Loading
Loading
+15 −14
Original line number Diff line number Diff line
@@ -241,19 +241,11 @@ void egl_cache_t::saveBlobCacheLocked() {
        }

        size_t fileSize = headerSize + cacheSize;
        if (ftruncate(fd, fileSize) == -1) {
            ALOGE("error setting cache file size: %s (%d)", strerror(errno),
                    errno);
            close(fd);
            unlink(fname);
            return;
        }

        uint8_t* buf = reinterpret_cast<uint8_t*>(mmap(NULL, fileSize,
                PROT_WRITE, MAP_SHARED, fd, 0));
        if (buf == MAP_FAILED) {
            ALOGE("error mmaping cache file: %s (%d)", strerror(errno),
                    errno);
        uint8_t* buf = new uint8_t [fileSize];
        if (!buf) {
            ALOGE("error allocating buffer for cache contents: %s (%d)",
                    strerror(errno), errno);
            close(fd);
            unlink(fname);
            return;
@@ -264,7 +256,7 @@ void egl_cache_t::saveBlobCacheLocked() {
        if (err != OK) {
            ALOGE("error writing cache contents: %s (%d)", strerror(-err),
                    -err);
            munmap(buf, fileSize);
            delete [] buf;
            close(fd);
            unlink(fname);
            return;
@@ -275,7 +267,16 @@ void egl_cache_t::saveBlobCacheLocked() {
        uint32_t* crc = reinterpret_cast<uint32_t*>(buf + 4);
        *crc = crc32c(buf + headerSize, cacheSize);

        munmap(buf, fileSize);
        if (write(fd, buf, fileSize) == -1) {
            ALOGE("error writing cache file: %s (%d)", strerror(errno),
                    errno);
            delete [] buf;
            close(fd);
            unlink(fname);
            return;
        }

        delete [] buf;
        fchmod(fd, S_IRUSR);
        close(fd);
    }