analytics: first_frame event, floats

This commit is contained in:
Nordup 2024-10-26 00:32:41 +04:00
parent 74e165b174
commit 6528dffe57
8 changed files with 43 additions and 29 deletions

View file

@ -17,13 +17,13 @@ func app_open() -> Dictionary:
return base("application_open") return base("application_open")
func heartbeat(time_spend: int) -> Dictionary: func heartbeat(time_spend: float) -> Dictionary:
var event = base("heartbeat") var event = base("heartbeat")
event.time_spend = time_spend event.time_spend = time_spend
return event return event
func app_exit(time_spend: int) -> Dictionary: func app_exit(time_spend: float) -> Dictionary:
var event = base("application_exit") var event = base("application_exit")
event.time_spend = time_spend event.time_spend = time_spend
return event return event
@ -43,14 +43,21 @@ func gate_open(url: String) -> Dictionary:
return event return event
func gate_enter(url: String, download_time: int) -> Dictionary: func gate_enter(url: String, download_time: float) -> Dictionary:
var event = base("gate_enter") var event = base("gate_enter")
event.gate_url = url event.gate_url = url
event.download_time = download_time event.download_time = download_time
return event return event
func gate_exit(url: String, time_spend: int) -> Dictionary: func first_frame(url: String, loading_time: float) -> Dictionary:
var event = base("first_frame")
event.gate_url = url
event.loading_time = loading_time
return event
func gate_exit(url: String, time_spend: float) -> Dictionary:
var event = base("gate_exit") var event = base("gate_exit")
event.gate_url = url event.gate_url = url
event.time_spend = time_spend event.time_spend = time_spend

View file

@ -26,12 +26,12 @@ func start_heartbeat() -> void:
func send_hearbeat() -> void: func send_hearbeat() -> void:
var time_spend = int(Time.get_ticks_msec() / 1000) var time_spend = float(Time.get_ticks_msec()) / 1000
analytics.send_event(AnalyticsEvents.heartbeat(time_spend)) analytics.send_event(AnalyticsEvents.heartbeat(time_spend))
func _exit_tree() -> void: func _exit_tree() -> void:
# Save to send on open # Save to send on open
var time_spend = int(Time.get_ticks_msec() / 1000) var time_spend = float(Time.get_ticks_msec()) / 1000
var event = AnalyticsEvents.app_exit(time_spend) var event = AnalyticsEvents.app_exit(time_spend)
DataSaver.set_value("analytics", "app_exit", JSON.stringify(event)) DataSaver.set_value("analytics", "app_exit", JSON.stringify(event))

View file

@ -3,7 +3,8 @@ class_name AnalyticsSenderGate
@export var gate_events: GateEvents @export var gate_events: GateEvents
var gate_open_time: int var gate_open_tick: int
var gate_enter_tick: int
var gate_url: String var gate_url: String
@ -13,6 +14,7 @@ func start() -> void:
gate_events.search.connect(send_search) gate_events.search.connect(send_search)
gate_events.open_gate.connect(send_gate_open) gate_events.open_gate.connect(send_gate_open)
gate_events.gate_entered.connect(send_gate_enter) gate_events.gate_entered.connect(send_gate_enter)
gate_events.first_frame.connect(send_first_frame)
gate_events.exit_gate.connect(send_gate_exit) gate_events.exit_gate.connect(send_gate_exit)
# Send latest exit event # Send latest exit event
@ -23,29 +25,34 @@ func start() -> void:
func send_search(query: String) -> void: func send_search(query: String) -> void:
if not gate_url.is_empty(): send_gate_exit() send_gate_exit()
analytics.send_event(AnalyticsEvents.search(query)) analytics.send_event(AnalyticsEvents.search(query))
func send_gate_open(url: String) -> void: func send_gate_open(url: String) -> void:
if not gate_url.is_empty(): send_gate_exit() send_gate_exit()
gate_url = url gate_url = url
gate_open_time = int(Time.get_ticks_msec() / 1000) gate_open_tick = Time.get_ticks_msec()
analytics.send_event(AnalyticsEvents.gate_open(url)) analytics.send_event(AnalyticsEvents.gate_open(url))
func send_gate_enter() -> void: func send_gate_enter() -> void:
var download_time = int(Time.get_ticks_msec() / 1000) - gate_open_time var download_time = get_delta_sec(gate_open_tick)
gate_open_time = int(Time.get_ticks_msec() / 1000) gate_enter_tick = Time.get_ticks_msec()
analytics.send_event(AnalyticsEvents.gate_enter(gate_url, download_time)) analytics.send_event(AnalyticsEvents.gate_enter(gate_url, download_time))
func send_first_frame() -> void:
var loading_time = get_delta_sec(gate_enter_tick)
analytics.send_event(AnalyticsEvents.first_frame(gate_url, loading_time))
func send_gate_exit() -> void: func send_gate_exit() -> void:
if gate_url.is_empty(): return if gate_url.is_empty(): return
var time_spend = int(Time.get_ticks_msec() / 1000) - gate_open_time var time_spend = get_delta_sec(gate_open_tick)
analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend)) analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend))
gate_url = "" gate_url = ""
@ -54,6 +61,10 @@ func _exit_tree() -> void:
if gate_url.is_empty(): return if gate_url.is_empty(): return
# Save to send on open # Save to send on open
var time_spend = int(Time.get_ticks_msec() / 1000) - gate_open_time var time_spend = get_delta_sec(gate_open_tick)
var event = AnalyticsEvents.gate_exit(gate_url, time_spend) var event = AnalyticsEvents.gate_exit(gate_url, time_spend)
DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event)) DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event))
func get_delta_sec(from_msec: int) -> float:
return float(Time.get_ticks_msec() - from_msec) / 1000

View file

@ -3,7 +3,6 @@ class_name CommandEvents
signal send_filehandle(filehandle_path: String) signal send_filehandle(filehandle_path: String)
signal ext_texture_format(format: RenderingDevice.DataFormat) signal ext_texture_format(format: RenderingDevice.DataFormat)
signal first_frame_drawn()
signal set_mouse_mode(mode: int) signal set_mouse_mode(mode: int)
@ -15,9 +14,5 @@ func ext_texture_format_emit(format: RenderingDevice.DataFormat) -> void:
ext_texture_format.emit(format) ext_texture_format.emit(format)
func first_frame_drawn_emit() -> void:
first_frame_drawn.emit()
func set_mouse_mode_emit(mode: int) -> void: func set_mouse_mode_emit(mode: int) -> void:
set_mouse_mode.emit(mode) set_mouse_mode.emit(mode)

View file

@ -7,6 +7,7 @@ signal gate_config_loaded(url: String, config: ConfigGate)
signal gate_info_loaded(gate: Gate, is_cached: bool) signal gate_info_loaded(gate: Gate, is_cached: bool)
signal gate_loaded(gate: Gate) signal gate_loaded(gate: Gate)
signal gate_entered signal gate_entered
signal first_frame
signal exit_gate signal exit_gate
signal download_progress(url: String, body_size: int, downloaded_bytes: int) signal download_progress(url: String, body_size: int, downloaded_bytes: int)
@ -57,6 +58,10 @@ func gate_entered_emit() -> void:
gate_entered.emit() gate_entered.emit()
func first_frame_emit() -> void:
first_frame.emit()
func exit_gate_emit() -> void: func exit_gate_emit() -> void:
current_search_query = "" current_search_query = ""
current_gate_url = "" current_gate_url = ""

View file

@ -26,7 +26,7 @@ func _execute_function(command: Command) -> Variant:
"first_frame_drawn": "first_frame_drawn":
if wrong_args_count(command, 0): return ERR_INVALID_PARAMETER if wrong_args_count(command, 0): return ERR_INVALID_PARAMETER
command_events.first_frame_drawn_emit() gate_events.first_frame_emit()
"set_mouse_mode": "set_mouse_mode":
if wrong_args_count(command, 1): return ERR_INVALID_PARAMETER if wrong_args_count(command, 1): return ERR_INVALID_PARAMETER

View file

@ -15,8 +15,8 @@ var texture_rid: RID
func _ready() -> void: func _ready() -> void:
gate_events.gate_entered.connect(create_external_texture) gate_events.gate_entered.connect(create_external_texture)
command_events.send_filehandle.connect(send_filehandle) command_events.send_filehandle.connect(send_filehandle)
command_events.ext_texture_format.connect(ext_texture_format) command_events.ext_texture_format.connect(set_texture_format)
command_events.first_frame_drawn.connect(first_frame_drawn) gate_events.first_frame.connect(show_render)
# Create empty texture with window size # Create empty texture with window size
var image = Image.create(width, height, false, Image.FORMAT_RGBA8) var image = Image.create(width, height, false, Image.FORMAT_RGBA8)
@ -57,7 +57,7 @@ func send_filehandle(filehandle_path: String) -> void:
Debug.logclr("filehandle was sent", Color.DIM_GRAY) Debug.logclr("filehandle was sent", Color.DIM_GRAY)
func ext_texture_format(format: RenderingDevice.DataFormat) -> void: func set_texture_format(format: RenderingDevice.DataFormat) -> void:
match format: match format:
RenderingDevice.DATA_FORMAT_R8G8B8A8_UNORM: RenderingDevice.DATA_FORMAT_R8G8B8A8_UNORM:
set_param("ext_texture_is_bgra", false) set_param("ext_texture_is_bgra", false)
@ -69,7 +69,7 @@ func ext_texture_format(format: RenderingDevice.DataFormat) -> void:
Debug.logerr("Texture format %d is not supported" % [format]) Debug.logerr("Texture format %d is not supported" % [format])
func first_frame_drawn() -> void: func show_render() -> void:
set_param("show_render", true) set_param("show_render", true)

View file

@ -13,7 +13,7 @@ class_name SplashScreen
func _ready(): func _ready():
gate_events.gate_info_loaded.connect(show_thumbnail) gate_events.gate_info_loaded.connect(show_thumbnail)
gate_events.gate_entered.connect(show_splash_screen) gate_events.gate_entered.connect(show_splash_screen)
command_events.first_frame_drawn.connect(first_frame_drawn) gate_events.first_frame.connect(func(): hide())
# Change size # Change size
show_splash_screen() show_splash_screen()
@ -36,10 +36,6 @@ func show_splash_screen() -> void:
self.texture = ImageTexture.create_from_image(image) self.texture = ImageTexture.create_from_image(image)
func first_frame_drawn() -> void:
hide()
func resize_and_convert(image: Image, format: Image.Format) -> Image: func resize_and_convert(image: Image, format: Image.Format) -> Image:
image.resize(width, height) image.resize(width, height)
image.convert(format) image.convert(format)