Skip to content

Commit bffcd4b

Browse files
Integrate RDK Telemetry
1 parent 680d0af commit bffcd4b

16 files changed

+614
-4
lines changed

Diff for: Source/CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ endif ()
1313

1414
add_subdirectory(JavaScriptCore)
1515

16+
add_subdirectory(ThirdParty/telemetry)
17+
if (USE_RDK_TELEMETRY)
18+
add_definitions(-DRDK_TELEMETRY)
19+
endif ()
20+
1621
if (ENABLE_WEBGL OR USE_ANGLE_EGL)
1722
add_subdirectory(ThirdParty/ANGLE)
1823
endif ()

Diff for: Source/ThirdParty/telemetry/CMakeLists.txt

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
2+
set(TELEMETRY_DIR "${THIRDPARTY_DIR}/telemetry")
3+
4+
set(TELEMETRY_INCLUDE_DIRECTORIES
5+
"${TELEMETRY_DIR}/include"
6+
"${CMAKE_BINARY_DIR}"
7+
)
8+
9+
include_directories("${TELEMETRY_INCLUDE_DIRECTORIES}")
10+
11+
if (USE_RDK_TELEMETRY)
12+
find_package(OdhErrTelemetry)
13+
if (NOT OdhErrTelemetry_FOUND)
14+
message(FATAL_ERROR "OdhErrTelemetry is needed for USE_RDK_TELEMETRY")
15+
endif ()
16+
17+
find_package(OdhOttTelemetry)
18+
if (NOT OdhOttTelemetry_FOUND)
19+
message(FATAL_ERROR "OdhOttTelemetry is needed for USE_RDK_TELEMETRY")
20+
endif ()
21+
22+
include_directories(
23+
${OdhErrTelemetry_INCLUDE_DIR}
24+
${OdhOttTelemetry_INCLUDE_DIR}
25+
)
26+
27+
set(TELEMETRY_LIBRARIES
28+
${OdhErrTelemetry_LIBRARIES}
29+
${OdhOttTelemetry_LIBRARIES}
30+
)
31+
32+
set(TELEMETRY_SOURCES
33+
${TELEMETRY_DIR}/src/RdkTelemetryReport.cpp
34+
)
35+
36+
add_definitions(-DRDK_TELEMETRY)
37+
else ()
38+
set(TELEMETRY_SOURCES
39+
${TELEMETRY_DIR}/src/DummyTelemetryReport.cpp
40+
)
41+
endif ()
42+
43+
add_library(telemetry STATIC ${TELEMETRY_SOURCES})
44+
target_link_libraries(telemetry PRIVATE ${TELEMETRY_LIBRARIES})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#============================================================================
2+
# Copyright (c) 2023 Liberty Global
3+
#============================================================================
4+
5+
# - Try to find ODH telemetry
6+
#
7+
# Once done this will define
8+
# OdhErrTelemetry_FOUND - System has the component
9+
# OdhErrTelemetry_INCLUDE_DIRS - Component include directories
10+
# OdhErrTelemetry_LIBRARIES - Libraries needed to use the component
11+
12+
find_package(PkgConfig QUIET)
13+
14+
find_path(OdhErrTelemetry_INCLUDE_DIR
15+
NAMES odherr.h
16+
HINTS ${TARGET_SYS_ROOT}/usr/include/rdk/libodherr
17+
)
18+
19+
find_library(OdhErrTelemetry_LIBRARY
20+
NAMES odherr
21+
HINTS ${TARGET_SYS_ROOT}/usr/lib
22+
)
23+
24+
include(FindPackageHandleStandardArgs)
25+
find_package_handle_standard_args(OdhErrTelemetry
26+
FOUND_VAR OdhErrTelemetry_FOUND
27+
REQUIRED_VARS OdhErrTelemetry_LIBRARY OdhErrTelemetry_INCLUDE_DIR
28+
)
29+
30+
if (OdhErrTelemetry_LIBRARY AND NOT TARGET OdhErrTelemetry::OdhErrTelemetry)
31+
add_library(OdhErrTelemetry::OdhErrTelemetry UNKNOWN IMPORTED GLOBAL)
32+
set_target_properties(OdhErrTelemetry::OdhErrTelemetry PROPERTIES
33+
IMPORTED_LOCATION "${OdhErrTelemetry_LIBRARY}"
34+
INTERFACE_COMPILE_OPTIONS "${OdhErrTelemetry_COMPILE_OPTIONS}"
35+
INTERFACE_INCLUDE_DIRECTORIES "${OdhErrTelemetry_INCLUDE_DIR}"
36+
)
37+
endif ()
38+
39+
mark_as_advanced(OdhErrTelemetry_INCLUDE_DIR OdhErrTelemetry_LIBRARY)
40+
41+
if (OdhErrTelemetry_FOUND)
42+
set(OdhErrTelemetry_INCLUDE_DIRS ${OdhErrTelemetry_INCLUDE_DIR})
43+
set(OdhErrTelemetry_LIBRARIES ${OdhErrTelemetry_LIBRARY})
44+
set(OdhErrTelemetry_PKG_EXTRA_LIBS "-lodherr")
45+
endif ()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#============================================================================
2+
# Copyright (c) 2023 Liberty Global
3+
#============================================================================
4+
5+
# - Try to find ODH telemetry
6+
#
7+
# Once done this will define
8+
# OdhOttTelemetry_FOUND - System has the component
9+
# OdhOttTelemetry_INCLUDE_DIRS - Component include directories
10+
# OdhOttTelemetry_LIBRARIES - Libraries needed to use the component
11+
12+
find_package(PkgConfig QUIET)
13+
14+
find_path(OdhOttTelemetry_INCLUDE_DIR
15+
NAMES odhott_wl.h
16+
HINTS ${TARGET_SYS_ROOT}/usr/include/odhott
17+
)
18+
19+
find_library(OdhOttTelemetry_LIBRARY
20+
NAMES odhott
21+
HINTS ${TARGET_SYS_ROOT}/usr/lib
22+
)
23+
24+
include(FindPackageHandleStandardArgs)
25+
find_package_handle_standard_args(OdhOttTelemetry
26+
FOUND_VAR OdhOttTelemetry_FOUND
27+
REQUIRED_VARS OdhOttTelemetry_LIBRARY OdhOttTelemetry_INCLUDE_DIR
28+
)
29+
30+
if (OdhOttTelemetry_LIBRARY AND NOT TARGET OdhOttTelemetry::OdhOttTelemetry)
31+
add_library(OdhOttTelemetry::OdhOttTelemetry UNKNOWN IMPORTED GLOBAL)
32+
set_target_properties(OdhOttTelemetry::OdhOttTelemetry PROPERTIES
33+
IMPORTED_LOCATION "${OdhOttTelemetry_LIBRARY}"
34+
INTERFACE_COMPILE_OPTIONS "${OdhOttTelemetry_COMPILE_OPTIONS}"
35+
INTERFACE_INCLUDE_DIRECTORIES "${OdhOttTelemetry_INCLUDE_DIR}"
36+
)
37+
endif ()
38+
39+
mark_as_advanced(OdhOttTelemetry_INCLUDE_DIR OdhOttTelemetry_LIBRARY)
40+
41+
if (OdhOttTelemetry_FOUND)
42+
set(OdhOttTelemetry_INCLUDE_DIRS ${OdhOttTelemetry_INCLUDE_DIR})
43+
set(OdhOttTelemetry_LIBRARIES ${OdhOttTelemetry_LIBRARY})
44+
set(OdhOttTelemetry_PKG_EXTRA_LIBS "-lodhott")
45+
endif ()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
3+
#include "ITelemetry.h"
4+
5+
namespace Telemetry {
6+
7+
class DummyTelemetryReport: public IReport {
8+
9+
public:
10+
void reportPlaybackState(
11+
AVPipelineState state,
12+
const std::string &additionalInfo = "",
13+
MediaType mediaType = MediaType::NONE) override;
14+
void reportDrmInfo(
15+
DrmType drmType,
16+
const std::string &additionalInfo = "") override;
17+
void reportWaylandInfo(
18+
const IWaylandInfoGetter &getter,
19+
WaylandAction action,
20+
WaylandGraphicsState gfxState,
21+
WaylandInputsState inputsState) override;
22+
};
23+
}

Diff for: Source/ThirdParty/telemetry/include/ITelemetry.h

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#pragma once
2+
3+
#include <string>
4+
5+
namespace Telemetry {
6+
7+
/*
8+
* Helper function to get some telemetry data from Wayland.
9+
*/
10+
class IWaylandInfoGetter {
11+
public:
12+
/*
13+
* Don't include:
14+
* #include <EGL/egl.h>
15+
* #include <EGL/eglplatform.h>
16+
* since there are import order issues.
17+
* Defining needed types as void*, like WebKit does.
18+
*/
19+
typedef void *EGLConfig;
20+
typedef void *EGLContext;
21+
typedef void *EGLDisplay;
22+
typedef void *EGLSurface;
23+
24+
virtual EGLDisplay getEGLDisplay() const = 0;
25+
virtual EGLConfig getEGLConfig() const = 0;
26+
virtual EGLSurface getEGLSurface() const = 0;
27+
virtual EGLContext getEGLContext() const = 0;
28+
virtual unsigned int getWindowWidth() const = 0;
29+
virtual unsigned int getWindowHeight() const = 0;
30+
};
31+
32+
class IReport
33+
{
34+
public:
35+
enum class AVPipelineState {
36+
CREATE,
37+
PLAY,
38+
PAUSE,
39+
STOP,
40+
DESTROY,
41+
FIRST_FRAME_DECODED,
42+
END_OF_STREAM,
43+
DECRYPT_ERROR,
44+
PLAYBACK_ERROR,
45+
DRM_ERROR,
46+
ERROR,
47+
SEEK_START,
48+
SEEK_DONE,
49+
VIDEO_RESOLUTION_CHANGED,
50+
UNKNOWN
51+
};
52+
53+
enum class MediaType {
54+
AUDIO,
55+
VIDEO,
56+
NONE
57+
};
58+
59+
enum class DrmType {
60+
PLAYREADY,
61+
WIDEVINE,
62+
NONE,
63+
UNKNOWN
64+
};
65+
66+
enum class WaylandAction
67+
{
68+
INIT_GFX,
69+
DEINIT_GFX,
70+
INIT_INPUTS,
71+
DEINIT_INPUTS
72+
};
73+
74+
enum class WaylandGraphicsState
75+
{
76+
GFX_NOT_INITIALIZED,
77+
GFX_INITIALIZED
78+
};
79+
80+
enum class WaylandInputsState
81+
{
82+
INPUTS_NOT_INITIALIZED,
83+
INPUTS_INITIALIZED
84+
};
85+
86+
virtual ~IReport() = default;
87+
virtual void reportPlaybackState(
88+
AVPipelineState state,
89+
const std::string &additionalInfo,
90+
MediaType mediaType) = 0;
91+
virtual void reportDrmInfo(
92+
DrmType drmType,
93+
const std::string &additionalInfo) = 0;
94+
virtual void reportWaylandInfo(
95+
const IWaylandInfoGetter &getter,
96+
WaylandAction action,
97+
WaylandGraphicsState gfxState,
98+
WaylandInputsState inputsState) = 0;
99+
};
100+
}
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
3+
#include <string>
4+
#include "ITelemetry.h"
5+
6+
namespace Telemetry {
7+
8+
class RdkTelemetryReport: public IReport {
9+
10+
public:
11+
void reportPlaybackState(
12+
AVPipelineState state,
13+
const std::string &additionalInfo = "",
14+
MediaType mediaType = MediaType::NONE) override;
15+
void reportDrmInfo(
16+
DrmType drmType,
17+
const std::string &additionalInfo = "") override;
18+
void reportWaylandInfo(
19+
const IWaylandInfoGetter &getter,
20+
WaylandAction action,
21+
WaylandGraphicsState gfxState,
22+
WaylandInputsState inputsState) override;
23+
};
24+
}
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#pragma once
2+
3+
#include <stdarg.h>
4+
#include <string>
5+
6+
#if defined(RDK_TELEMETRY)
7+
#include "RdkTelemetryReport.h"
8+
using TelemetryImpl = Telemetry::RdkTelemetryReport;
9+
#else
10+
#include "DummyTelemetryReport.h"
11+
using TelemetryImpl = Telemetry::DummyTelemetryReport;
12+
#endif
13+
14+
namespace Telemetry
15+
{
16+
void init(const std::string &name = "WebKitBrowser");
17+
void deinit();
18+
void reportErrorV(const char* file, int line, const char* function, const char* format, va_list args);
19+
void reportError(const char* file, int line, const char* function, const char* format, ...);
20+
}
+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "TelemetryReport.h"
2+
3+
namespace Telemetry {
4+
5+
void init(const std::string &name) {
6+
(void)name;
7+
}
8+
9+
void deinit() {
10+
}
11+
12+
void reportErrorV(const char* file, int line, const char* function, const char* format, va_list args) {
13+
(void)file;
14+
(void)line;
15+
(void)function;
16+
(void)format;
17+
(void)args;
18+
}
19+
20+
void reportError(const char* file, int line, const char* function, const char* format, ...) {
21+
(void)file;
22+
(void)line;
23+
(void)function;
24+
(void)format;
25+
}
26+
27+
void DummyTelemetryReport::reportPlaybackState(
28+
AVPipelineState state,
29+
const std::string &additionalInfo,
30+
MediaType mediaType) {
31+
(void)state;
32+
(void)additionalInfo;
33+
(void)mediaType;
34+
}
35+
36+
void DummyTelemetryReport::reportDrmInfo(
37+
DrmType drmType,
38+
const std::string &additionalInfo) {
39+
(void)drmType;
40+
(void)additionalInfo;
41+
}
42+
43+
void DummyTelemetryReport::reportWaylandInfo(
44+
const IWaylandInfoGetter &getter,
45+
WaylandAction action,
46+
WaylandGraphicsState gfxState,
47+
WaylandInputsState inputsState) {
48+
(void)getter;
49+
(void)action;
50+
(void)gfxState;
51+
(void)inputsState;
52+
}
53+
}

0 commit comments

Comments
 (0)