Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrate RDK Telemetry #1445

Open
wants to merge 2 commits into
base: wpe-2.38
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ endif ()

add_subdirectory(JavaScriptCore)

add_subdirectory(ThirdParty/telemetry)
if (USE_RDK_TELEMETRY)
add_definitions(-DRDK_TELEMETRY)
endif ()

if (ENABLE_WEBGL OR USE_ANGLE_EGL)
add_subdirectory(ThirdParty/ANGLE)
endif ()
Expand Down
44 changes: 44 additions & 0 deletions Source/ThirdParty/telemetry/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(TELEMETRY_DIR "${THIRDPARTY_DIR}/telemetry")

set(TELEMETRY_INCLUDE_DIRECTORIES
"${TELEMETRY_DIR}/include"
"${CMAKE_BINARY_DIR}"
)

include_directories("${TELEMETRY_INCLUDE_DIRECTORIES}")

if (USE_RDK_TELEMETRY)
find_package(OdhErrTelemetry)
if (NOT OdhErrTelemetry_FOUND)
message(FATAL_ERROR "OdhErrTelemetry is needed for USE_RDK_TELEMETRY")
endif ()

find_package(OdhOttTelemetry)
if (NOT OdhOttTelemetry_FOUND)
message(FATAL_ERROR "OdhOttTelemetry is needed for USE_RDK_TELEMETRY")
endif ()

include_directories(
${OdhErrTelemetry_INCLUDE_DIR}
${OdhOttTelemetry_INCLUDE_DIR}
)

set(TELEMETRY_LIBRARIES
${OdhErrTelemetry_LIBRARIES}
${OdhOttTelemetry_LIBRARIES}
)

set(TELEMETRY_SOURCES
${TELEMETRY_DIR}/src/RdkTelemetryReport.cpp
)

add_definitions(-DRDK_TELEMETRY)
else ()
set(TELEMETRY_SOURCES
${TELEMETRY_DIR}/src/DummyTelemetryReport.cpp
)
endif ()

add_library(telemetry STATIC ${TELEMETRY_SOURCES})
target_link_libraries(telemetry PRIVATE ${TELEMETRY_LIBRARIES})
45 changes: 45 additions & 0 deletions Source/ThirdParty/telemetry/cmake/FindOdhErrTelemetry.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#============================================================================
# Copyright (c) 2023 Liberty Global
#============================================================================

# - Try to find ODH telemetry
#
# Once done this will define
# OdhErrTelemetry_FOUND - System has the component
# OdhErrTelemetry_INCLUDE_DIRS - Component include directories
# OdhErrTelemetry_LIBRARIES - Libraries needed to use the component

find_package(PkgConfig QUIET)

find_path(OdhErrTelemetry_INCLUDE_DIR
NAMES odherr.h
HINTS ${TARGET_SYS_ROOT}/usr/include/rdk/libodherr
)

find_library(OdhErrTelemetry_LIBRARY
NAMES odherr
HINTS ${TARGET_SYS_ROOT}/usr/lib
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OdhErrTelemetry
FOUND_VAR OdhErrTelemetry_FOUND
REQUIRED_VARS OdhErrTelemetry_LIBRARY OdhErrTelemetry_INCLUDE_DIR
)

if (OdhErrTelemetry_LIBRARY AND NOT TARGET OdhErrTelemetry::OdhErrTelemetry)
add_library(OdhErrTelemetry::OdhErrTelemetry UNKNOWN IMPORTED GLOBAL)
set_target_properties(OdhErrTelemetry::OdhErrTelemetry PROPERTIES
IMPORTED_LOCATION "${OdhErrTelemetry_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${OdhErrTelemetry_COMPILE_OPTIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${OdhErrTelemetry_INCLUDE_DIR}"
)
endif ()

mark_as_advanced(OdhErrTelemetry_INCLUDE_DIR OdhErrTelemetry_LIBRARY)

if (OdhErrTelemetry_FOUND)
set(OdhErrTelemetry_INCLUDE_DIRS ${OdhErrTelemetry_INCLUDE_DIR})
set(OdhErrTelemetry_LIBRARIES ${OdhErrTelemetry_LIBRARY})
set(OdhErrTelemetry_PKG_EXTRA_LIBS "-lodherr")
endif ()
45 changes: 45 additions & 0 deletions Source/ThirdParty/telemetry/cmake/FindOdhOttTelemetry.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#============================================================================
# Copyright (c) 2023 Liberty Global
#============================================================================

# - Try to find ODH telemetry
#
# Once done this will define
# OdhOttTelemetry_FOUND - System has the component
# OdhOttTelemetry_INCLUDE_DIRS - Component include directories
# OdhOttTelemetry_LIBRARIES - Libraries needed to use the component

find_package(PkgConfig QUIET)

find_path(OdhOttTelemetry_INCLUDE_DIR
NAMES odhott_wl.h
HINTS ${TARGET_SYS_ROOT}/usr/include/odhott
)

find_library(OdhOttTelemetry_LIBRARY
NAMES odhott
HINTS ${TARGET_SYS_ROOT}/usr/lib
)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OdhOttTelemetry
FOUND_VAR OdhOttTelemetry_FOUND
REQUIRED_VARS OdhOttTelemetry_LIBRARY OdhOttTelemetry_INCLUDE_DIR
)

if (OdhOttTelemetry_LIBRARY AND NOT TARGET OdhOttTelemetry::OdhOttTelemetry)
add_library(OdhOttTelemetry::OdhOttTelemetry UNKNOWN IMPORTED GLOBAL)
set_target_properties(OdhOttTelemetry::OdhOttTelemetry PROPERTIES
IMPORTED_LOCATION "${OdhOttTelemetry_LIBRARY}"
INTERFACE_COMPILE_OPTIONS "${OdhOttTelemetry_COMPILE_OPTIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${OdhOttTelemetry_INCLUDE_DIR}"
)
endif ()

mark_as_advanced(OdhOttTelemetry_INCLUDE_DIR OdhOttTelemetry_LIBRARY)

if (OdhOttTelemetry_FOUND)
set(OdhOttTelemetry_INCLUDE_DIRS ${OdhOttTelemetry_INCLUDE_DIR})
set(OdhOttTelemetry_LIBRARIES ${OdhOttTelemetry_LIBRARY})
set(OdhOttTelemetry_PKG_EXTRA_LIBS "-lodhott")
endif ()
23 changes: 23 additions & 0 deletions Source/ThirdParty/telemetry/include/DummyTelemetryReport.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#pragma once

#include "ITelemetry.h"

namespace Telemetry {

class DummyTelemetryReport: public IReport {

public:
void reportPlaybackState(
AVPipelineState state,
const std::string &additionalInfo = "",
MediaType mediaType = MediaType::NONE) override;
void reportDrmInfo(
DrmType drmType,
const std::string &additionalInfo = "") override;
void reportWaylandInfo(
const IWaylandInfoGetter &getter,
WaylandAction action,
WaylandGraphicsState gfxState,
WaylandInputsState inputsState) override;
};
}
100 changes: 100 additions & 0 deletions Source/ThirdParty/telemetry/include/ITelemetry.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#pragma once

#include <string>

namespace Telemetry {

/*
* Helper function to get some telemetry data from Wayland.
*/
class IWaylandInfoGetter {
public:
/*
* Don't include:
* #include <EGL/egl.h>
* #include <EGL/eglplatform.h>
* since there are import order issues.
* Defining needed types as void*, like WebKit does.
*/
typedef void *EGLConfig;
typedef void *EGLContext;
typedef void *EGLDisplay;
typedef void *EGLSurface;

virtual EGLDisplay getEGLDisplay() const = 0;
virtual EGLConfig getEGLConfig() const = 0;
virtual EGLSurface getEGLSurface() const = 0;
virtual EGLContext getEGLContext() const = 0;
virtual unsigned int getWindowWidth() const = 0;
virtual unsigned int getWindowHeight() const = 0;
};

class IReport
{
public:
enum class AVPipelineState {
CREATE,
PLAY,
PAUSE,
STOP,
DESTROY,
FIRST_FRAME_DECODED,
END_OF_STREAM,
DECRYPT_ERROR,
PLAYBACK_ERROR,
DRM_ERROR,
ERROR,
SEEK_START,
SEEK_DONE,
VIDEO_RESOLUTION_CHANGED,
UNKNOWN
};

enum class MediaType {
AUDIO,
VIDEO,
NONE
};

enum class DrmType {
PLAYREADY,
WIDEVINE,
NONE,
UNKNOWN
};

enum class WaylandAction
{
INIT_GFX,
DEINIT_GFX,
INIT_INPUTS,
DEINIT_INPUTS
};

enum class WaylandGraphicsState
{
GFX_NOT_INITIALIZED,
GFX_INITIALIZED
};

enum class WaylandInputsState
{
INPUTS_NOT_INITIALIZED,
INPUTS_INITIALIZED
};

virtual ~IReport() = default;
virtual void reportPlaybackState(
AVPipelineState state,
const std::string &additionalInfo,
MediaType mediaType) = 0;
virtual void reportDrmInfo(
DrmType drmType,
const std::string &additionalInfo) = 0;
virtual void reportWaylandInfo(
const IWaylandInfoGetter &getter,
WaylandAction action,
WaylandGraphicsState gfxState,
WaylandInputsState inputsState) = 0;
};
}
24 changes: 24 additions & 0 deletions Source/ThirdParty/telemetry/include/RdkTelemetryReport.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once

#include <string>
#include "ITelemetry.h"

namespace Telemetry {

class RdkTelemetryReport: public IReport {

public:
void reportPlaybackState(
AVPipelineState state,
const std::string &additionalInfo = "",
MediaType mediaType = MediaType::NONE) override;
void reportDrmInfo(
DrmType drmType,
const std::string &additionalInfo = "") override;
void reportWaylandInfo(
const IWaylandInfoGetter &getter,
WaylandAction action,
WaylandGraphicsState gfxState,
WaylandInputsState inputsState) override;
};
}
20 changes: 20 additions & 0 deletions Source/ThirdParty/telemetry/include/TelemetryReport.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once

#include <stdarg.h>
#include <string>

#if defined(RDK_TELEMETRY)
#include "RdkTelemetryReport.h"
using TelemetryImpl = Telemetry::RdkTelemetryReport;
#else
#include "DummyTelemetryReport.h"
using TelemetryImpl = Telemetry::DummyTelemetryReport;
#endif

namespace Telemetry
{
void init(const std::string &name = "WebKitBrowser");
void deinit();
void reportErrorV(const char* file, int line, const char* function, const char* format, va_list args);
void reportError(const char* file, int line, const char* function, const char* format, ...);
}
53 changes: 53 additions & 0 deletions Source/ThirdParty/telemetry/src/DummyTelemetryReport.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#include "TelemetryReport.h"

namespace Telemetry {

void init(const std::string &name) {
(void)name;
}

void deinit() {
}

void reportErrorV(const char* file, int line, const char* function, const char* format, va_list args) {
(void)file;
(void)line;
(void)function;
(void)format;
(void)args;
}

void reportError(const char* file, int line, const char* function, const char* format, ...) {
(void)file;
(void)line;
(void)function;
(void)format;
}

void DummyTelemetryReport::reportPlaybackState(
AVPipelineState state,
const std::string &additionalInfo,
MediaType mediaType) {
(void)state;
(void)additionalInfo;
(void)mediaType;
}

void DummyTelemetryReport::reportDrmInfo(
DrmType drmType,
const std::string &additionalInfo) {
(void)drmType;
(void)additionalInfo;
}

void DummyTelemetryReport::reportWaylandInfo(
const IWaylandInfoGetter &getter,
WaylandAction action,
WaylandGraphicsState gfxState,
WaylandInputsState inputsState) {
(void)getter;
(void)action;
(void)gfxState;
(void)inputsState;
}
}
Loading