/*
 * Copyright 2006 The Android Open Source Project
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "include/private/SkDebug.h"
#include "include/private/SkFeatures.h"
#include "include/private/SkLog.h"

#if defined(SK_BUILD_FOR_ANDROID)

#include <stdio.h>
#include <cstdarg>

#ifdef LOG_TAG
  #undef LOG_TAG
#endif
#define LOG_TAG "skia"
#include <android/log.h>

// Print debug output to stdout as well.  This is useful for command line
// applications
bool gSkDebugToStdOut = false;

void SkLogVAList(SkLogPriority priority, const char format[], va_list args) {
    va_list args_copy;

    if (gSkDebugToStdOut) {
        va_copy(args_copy, args);
        vprintf(format, args_copy);
        va_end(args_copy);
        fflush(stdout);
    }

    // Forces all Info and Debug logs to show as warnings in Android's RenderEngine. This hack
    // should be dropped as we update SkDebugf call sites to have more precise priority.
#if defined(SK_IN_RENDERENGINE)
    if (priority > SkLogPriority::kWarning) {
        priority = SkLogPriority::kWarning;
    }
#endif

    int android_priority;
    switch (priority) {
        case SkLogPriority::kError:   android_priority = ANDROID_LOG_ERROR;   break;
        case SkLogPriority::kWarning: android_priority = ANDROID_LOG_WARN;    break;
        case SkLogPriority::kInfo:    android_priority = ANDROID_LOG_INFO;    break;
        case SkLogPriority::kDebug:   android_priority = ANDROID_LOG_DEBUG;   break;
        default:                      android_priority = ANDROID_LOG_DEBUG;   break;
    }

    __android_log_vprint(android_priority, LOG_TAG, format, args);
}

#endif  // defined(SK_BUILD_FOR_ANDROID)
