diff options
-rw-r--r-- | src/compiler/glsl/tests/cache_test.c | 40 | ||||
-rw-r--r-- | 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 <errno.h> #include <stdarg.h> #include <inttypes.h> +#include <limits.h> +#include <unistd.h> #include "util/mesa-sha1.h" #include "util/disk_cache.h" @@ -40,6 +42,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) { if (actual != expected) { @@ -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) * <pwd.pw_dir>/.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) { |