@@ -4,6 +4,7 @@ use crate::dap_types::{self, Breakpoint, SetBreakpointsArguments, SetBreakpoints
44use crate :: db:: Db ;
55use crate :: handler:: { Handler , TraceKind } ;
66use crate :: paths:: CODETRACER_PATHS ;
7+ use crate :: rr_dispatcher:: CtRRArgs ;
78use crate :: task:: {
89 gen_task_id, Action , CallSearchArg , CalltraceLoadArgs , CollapseCallsArgs , CtLoadFlowArguments ,
910 CtLoadLocalsArguments , FunctionLocation , LoadHistoryArg , LocalStepJump , Location , ProgramEvent , RunTracepointsArg ,
@@ -17,7 +18,7 @@ use crate::transport::DapTransport;
1718#[ cfg( feature = "browser-transport" ) ]
1819use crate :: transport:: { DapResult , WorkerTransport } ;
1920
20- use log:: info;
21+ use log:: { info, warn } ;
2122use serde_json:: json;
2223use std:: collections:: { HashMap , HashSet } ;
2324use std:: error:: Error ;
@@ -86,8 +87,13 @@ pub fn run(socket_path: &PathBuf) -> Result<(), Box<dyn Error>> {
8687 handle_client ( & mut reader, & mut writer)
8788}
8889
89- fn launch ( trace_folder : & Path , trace_file : & Path , raw_diff_index : Option < String > , seq : i64 ) -> Result < Handler , Box < dyn Error > > {
90- // TODO: log this when logging logic is properly abstracted
90+ fn launch (
91+ trace_folder : & Path ,
92+ trace_file : & Path ,
93+ raw_diff_index : Option < String > ,
94+ ct_rr_worker_exe : & Path ,
95+ seq : i64 ,
96+ ) -> Result < Handler , Box < dyn Error > > {
9197 info ! ( "run launch() for {:?}" , trace_folder) ;
9298 let trace_file_format = if trace_file. extension ( ) == Some ( std:: ffi:: OsStr :: new ( "json" ) ) {
9399 runtime_tracing:: TraceEventsFileFormat :: Json
@@ -106,18 +112,23 @@ fn launch(trace_folder: &Path, trace_file: &Path, raw_diff_index: Option<String>
106112 let mut proc = TraceProcessor :: new ( & mut db) ;
107113 proc. postprocess ( & trace) ?;
108114
109- let mut handler = Handler :: new ( TraceKind :: DB , Box :: new ( db) ) ;
115+ let mut handler = Handler :: new ( TraceKind :: DB , CtRRArgs :: default ( ) , Box :: new ( db) ) ;
110116 handler. dap_client . seq = seq;
111117 handler. raw_diff_index = raw_diff_index;
112118 handler. run_to_entry ( dap:: Request :: default ( ) ) ?;
113119 Ok ( handler)
114120 } else {
115121 warn ! ( "problem with reading metadata or path trace files: try rr?" ) ;
116- let path = trace_folder. join ( "rr" ) ;
122+ let path = trace_folder. join ( "rr" ) . join ( "latest-trace ") ;
117123 if path. exists ( ) {
118- let db = Db :: new ( & PathBuf :: from ( "" ) ) ;
119- let mut handler = Handler :: new ( TraceKind :: RR , Box :: new ( db) ) ;
124+ let db = Db :: new ( & PathBuf :: from ( "" ) ) ;
125+ let ct_rr_args = CtRRArgs {
126+ worker_exe : PathBuf :: from ( ct_rr_worker_exe) ,
127+ rr_trace_folder : path,
128+ } ;
129+ let mut handler = Handler :: new ( TraceKind :: RR , ct_rr_args, Box :: new ( db) ) ;
120130 handler. dap_client . seq = seq;
131+ handler. raw_diff_index = raw_diff_index;
121132 handler. run_to_entry ( dap:: Request :: default ( ) ) ?;
122133 Ok ( handler)
123134 } else {
@@ -245,6 +256,7 @@ pub struct Ctx {
245256 pub launch_trace_folder : PathBuf ,
246257 pub launch_trace_file : PathBuf ,
247258 pub launch_raw_diff_index : Option < String > ,
259+ pub ct_rr_worker_exe : PathBuf ,
248260 pub received_configuration_done : bool ,
249261}
250262
@@ -258,6 +270,7 @@ impl Default for Ctx {
258270 launch_trace_folder : PathBuf :: from ( "" ) ,
259271 launch_trace_file : PathBuf :: from ( "" ) ,
260272 launch_raw_diff_index : None ,
273+ ct_rr_worker_exe : PathBuf :: from ( "" ) ,
261274 received_configuration_done : false ,
262275 }
263276 }
@@ -406,9 +419,15 @@ pub fn handle_message<T: DapTransport>(
406419 //info!("stored launch trace folder: {0:?}", ctx.launch_trace_folder)
407420
408421 ctx. launch_raw_diff_index = args. raw_diff_index . clone ( ) ;
422+ ctx. ct_rr_worker_exe = args. ct_rr_worker_exe . unwrap_or ( PathBuf :: from ( "" ) ) ;
409423
410424 if ctx. received_configuration_done {
411- ctx. handler = Some ( launch ( & ctx. launch_trace_folder , & ctx. launch_trace_file , ctx. launch_raw_diff_index . clone ( ) , ctx. seq ) ?) ;
425+ ctx. handler = Some ( launch (
426+ & ctx. launch_trace_folder ,
427+ & ctx. launch_trace_file ,
428+ ctx. launch_raw_diff_index . clone ( ) ,
429+ & ctx. ct_rr_worker_exe ,
430+ ctx. seq ) ?) ;
412431 if let Some ( h) = ctx. handler . as_mut ( ) {
413432 write_dap_messages ( transport, h, & mut ctx. seq ) ?;
414433 }
@@ -457,7 +476,12 @@ pub fn handle_message<T: DapTransport>(
457476 // ctx.received_launch
458477 // );
459478 if ctx. received_launch {
460- ctx. handler = Some ( launch ( & ctx. launch_trace_folder , & ctx. launch_trace_file , ctx. launch_raw_diff_index . clone ( ) , ctx. seq ) ?) ;
479+ ctx. handler = Some ( launch (
480+ & ctx. launch_trace_folder ,
481+ & ctx. launch_trace_file ,
482+ ctx. launch_raw_diff_index . clone ( ) ,
483+ & ctx. ct_rr_worker_exe ,
484+ ctx. seq ) ?) ;
461485 if let Some ( h) = ctx. handler . as_mut ( ) {
462486 write_dap_messages ( transport, h, & mut ctx. seq ) ?;
463487 }
0 commit comments