util/disk_cache: create timestamp and gpu_id dirs when MESA_GLSL_CACHE_DIR is used

The make check test is also updated to make sure these dirs are created.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Timothy Arceri
2017-02-21 16:34:49 +11:00
parent 207e3a6e4b
commit 0441e6bc8b
2 changed files with 48 additions and 2 deletions

View File

@@ -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"
@@ -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);
}

View File

@@ -225,7 +225,13 @@ 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) {
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;
}