/*
 * Copyright (C) 2017 Igalia, S.L.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library General Public License for more details.
 *
 *  You should have received a copy of the GNU Library General Public License
 *  along with this library; see the file COPYING.LIB.  If not, write to
 *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 *  Boston, MA 02110-1301, USA.
 */

#pragma once

#if USE(GLIB)

namespace WTF {

#if PLATFORM(GTK)

// This is a global enum to define priorities used by GLib run loop sources.
// In GLib, priorities are represented by an integer where lower values mean
// higher priority. The following macros are defined in GLib:
// G_PRIORITY_LOW = 300
// G_PRIORITY_DEFAULT_IDLE = 200
// G_PRIORITY_HIGH_IDLE = 100
// G_PRIORITY_DEFAULT = 0
// G_PRIORITY_HIGH = -100
// We don't use those macros here to avoid having to include glib header only
// for this. But we should take into account that GLib uses G_PRIORITY_DEFAULT
// for timeout sources and G_PRIORITY_DEFAULT_IDLE for idle sources.
// Changes in these priorities can have a huge impact in performance, and in
// the correctness too, so be careful when changing them.
enum RunLoopSourcePriority {
    // RunLoop::dispatch().
    RunLoopDispatcher = 100,

    // RunLoopTimer priority by default. It can be changed with RunLoopTimer::setPriority().
    RunLoopTimer = 0,

    // Garbage collector timers.
    JavascriptTimer = 200,

    // Memory pressure monitor.
    MemoryPressureHandlerTimer = -100,

    // WebCore timers.
    MainThreadSharedTimer = 100,

    // Used for timers that discard resources like backing store, buffers, etc.
    ReleaseUnusedResourcesTimer = 200,

    // Rendering timer in the threaded compositor.
    CompositingThreadUpdateTimer = 110,

    // Layer flush.
    LayerFlushTimer = 110,

    // DisplayRefreshMonitor timer, should have the same value as the LayerFlushTimer.
    DisplayRefreshMonitorTimer = 110,

    // Rendering timer in the main thread when accelerated compositing is not used.
    NonAcceleratedDrawingTimer = 100,

    // Async IO network callbacks.
    AsyncIONetwork = 100,

    // Disk cache read callbacks.
    DiskCacheRead = 100,

    // Disk cache write callbacks.
    DiskCacheWrite = 200,
};

#else

enum RunLoopSourcePriority {
    RunLoopDispatcher = 0,
    RunLoopTimer = 0,

    MemoryPressureHandlerTimer = -10,

    JavascriptTimer = 10,
    MainThreadSharedTimer = 10,

    LayerFlushTimer = 0,
    DisplayRefreshMonitorTimer = 0,

    CompositingThreadUpdateTimer = 0,

    ReleaseUnusedResourcesTimer = 0,

    AsyncIONetwork = 10,
    DiskCacheRead = 10,
    DiskCacheWrite = 20
};

#endif

} // namespace WTF

using WTF::RunLoopSourcePriority;

#endif // USE(GLIB)
