From 0441e6bc8b377cf7a7b8441bca69121b98e30620 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Tue, 21 Feb 2017 16:34:49 +1100 Subject: [PATCH] util/disk_cache: create timestamp and gpu_id dirs when MESA_GLSL_CACHE_DIR is used MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The make check test is also updated to make sure these dirs are created. Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/tests/cache_test.c | 40 ++++++++++++++++++++++++++++ src/util/disk_cache.c | 10 +++++-- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/compiler/glsl/tests/cache_test.c b/src/compiler/glsl/tests/cache_test.c index ba56441b92e..c4e6e369942 100644 --- a/src/compiler/glsl/tests/cache_test.c +++ b/src/compiler/glsl/tests/cache_test.c @@ -31,6 +31,8 @@ #include #include #include +#include +#include #include "util/mesa-sha1.h" #include "util/disk_cache.h" @@ -39,6 +41,16 @@ bool error = false; #ifdef ENABLE_SHADER_CACHE +static void +expect_true(bool result, const char *test) +{ + if (!result) { + fprintf(stderr, "Error: Test '%s' failed: Expected=true" + ", Actual=false\n", test); + error = true; + } +} + static void expect_equal(uint64_t actual, uint64_t expected, const char *test) { @@ -114,6 +126,26 @@ rmrf_local(const char *path) return nftw(path, remove_entry, 64, FTW_DEPTH | FTW_PHYS | FTW_MOUNT); } +static void +check_timestamp_and_gpu_id_directories_created(const char *cache_dir) +{ + bool sub_dirs_created = false; + + char buf[PATH_MAX]; + if (getcwd(buf, PATH_MAX)) { + char *full_path = NULL; + if (asprintf(&full_path, "%s%s", buf, ++cache_dir) != -1 ) { + struct stat sb; + if (stat(full_path, &sb) != -1 && S_ISDIR(sb.st_mode)) + sub_dirs_created = true; + + free(full_path); + } + } + + expect_true(sub_dirs_created, "create timestamp and gpu ip sub dirs"); +} + #define CACHE_TEST_TMP "./cache-test-tmp" static void @@ -152,6 +184,10 @@ test_disk_cache_create(void) cache = disk_cache_create("test", "make_check"); expect_non_null(cache, "disk_cache_create with XDG_CACHE_HOME set"); + check_timestamp_and_gpu_id_directories_created(CACHE_TEST_TMP + "/xdg-cache-home" + "/mesa/make_check/test"); + disk_cache_destroy(cache); /* Test with MESA_GLSL_CACHE_DIR set */ @@ -167,6 +203,10 @@ test_disk_cache_create(void) cache = disk_cache_create("test", "make_check"); expect_non_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DIR set"); + check_timestamp_and_gpu_id_directories_created(CACHE_TEST_TMP + "/mesa-glsl-cache-dir" + "/mesa/make_check/test"); + disk_cache_destroy(cache); } diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 6618a2471bc..2f138dab19b 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -225,8 +225,14 @@ disk_cache_create(const char *gpu_name, const char *timestamp) * /.cache/mesa */ path = getenv("MESA_GLSL_CACHE_DIR"); - if (path && mkdir_if_needed(path) == -1) { - goto fail; + if (path) { + if (mkdir_if_needed(path) == -1) + goto fail; + + path = create_mesa_cache_dir(local, path, timestamp, + gpu_name); + if (path == NULL) + goto fail; } if (path == NULL) { -- 2.30.2