diff --git a/crates/loro-internal/examples/encoding_parallel.rs b/crates/loro-internal/examples/encoding_parallel.rs index a19db313..17d19dfa 100644 --- a/crates/loro-internal/examples/encoding_parallel.rs +++ b/crates/loro-internal/examples/encoding_parallel.rs @@ -1,6 +1,5 @@ -// use bench_utils::{get_automerge_actions, TextAction}; -// use loro_internal::{EncodeMode, LoroCore, VersionVector}; -// use rand::{rngs::StdRng, Rng, SeedableRng}; +use bench_utils::{get_automerge_actions, TextAction}; +use loro_internal::LoroDoc; // #[allow(dead_code)] // fn parallel() { @@ -62,5 +61,24 @@ // } fn main() { - // real_time() + let actions = get_automerge_actions(); + let loro = LoroDoc::default(); + let loro_b = LoroDoc::default(); + let text = loro.get_text("text"); + let mut count = 0; + for TextAction { pos, ins, del } in actions.iter() { + { + let mut txn = loro.txn().unwrap(); + text.delete(&mut txn, *pos, *del).unwrap(); + text.insert(&mut txn, *pos, ins).unwrap(); + } + + loro_b + .import(&loro.export_from(&loro_b.oplog_vv())) + .unwrap(); + count += 1; + if count % 1000 == 0 { + println!("{}", count); + } + } } diff --git a/crates/loro-internal/src/container/text/tracker.rs b/crates/loro-internal/src/container/text/tracker.rs index 4aa05b7e..fa51782b 100644 --- a/crates/loro-internal/src/container/text/tracker.rs +++ b/crates/loro-internal/src/container/text/tracker.rs @@ -1,3 +1,4 @@ +use debug_log::debug_dbg; use loro_common::IdSpanVector; use rle::{rle_tree::UnsafeCursor, HasLength, Sliceable}; use smallvec::SmallVec; diff --git a/crates/loro-internal/src/diff_calc.rs b/crates/loro-internal/src/diff_calc.rs index 781e205a..359cec50 100644 --- a/crates/loro-internal/src/diff_calc.rs +++ b/crates/loro-internal/src/diff_calc.rs @@ -1,3 +1,4 @@ +use debug_log::debug_dbg; use enum_dispatch::enum_dispatch; use fxhash::{FxHashMap, FxHashSet}; use loro_common::{HasIdSpan, PeerID, ID}; @@ -56,11 +57,13 @@ impl DiffCalculator { after: &crate::VersionVector, after_frontiers: Option<&Frontiers>, ) -> Vec { - let include_before = self.last_vv.includes_vv(before); - let include_after = self.last_vv.includes_vv(after); - if self.has_all && (!include_after || !include_before) { - self.has_all = false; - self.last_vv = Default::default(); + if self.has_all { + let include_before = self.last_vv.includes_vv(before); + let include_after = self.last_vv.includes_vv(after); + if !include_after || !include_before { + self.has_all = false; + self.last_vv = Default::default(); + } } let affected_set = if !self.has_all { diff --git a/crates/loro-internal/src/loro.rs b/crates/loro-internal/src/loro.rs index b8af84e4..c7c5c203 100644 --- a/crates/loro-internal/src/loro.rs +++ b/crates/loro-internal/src/loro.rs @@ -208,7 +208,7 @@ impl LoroDoc { let old_frontiers = oplog.frontiers().clone(); oplog.decode(bytes)?; if !self.detached { - let mut diff = self.diff_calculator.lock().unwrap(); + let mut diff = DiffCalculator::default(); let diff = diff.calc_diff_internal( &oplog, &old_vv,