swf-lib godot 伪代码案例

extends Node

func _ready():
    var swf_resource = SwfResource.new()
    
    # 加载 SWF 文件
    if swf_resource.load_swf("user://90.swf"):
        swf_resource.print_info()
        
        # 获取信息
        print("帧数: ", swf_resource.get_num_frames())
        print("标签数: ", swf_resource.get_num_tags())
        print("帧率: ", swf_resource.get_frame_rate(), " FPS")
        
        # 获取所有信息
        var info = swf_resource.get_all_info()
        print("SWF 信息: ", info)
        
        # 遍历标签
        for i in range(swf_resource.get_tags_count()):
            var tag_info = swf_resource.get_tag_info(i)
            print("标签 ", i, ": ", tag_info)
    else:
        print("加载 SWF 失败!")

测试使用rust

use std::time::Instant;

fn main() {
    use std::io::BufReader;
    use std::fs::File;

    let start = Instant::now();
    
    // 测量文件打开时间
    let file_start = Instant::now();
    let file = File::open("/Users/furau/Desktop/rust-study/one/src/90.swf").unwrap();
    let reader = BufReader::new(file);
    let file_duration = file_start.elapsed();
    
    // 测量解压时间
    let decompress_start = Instant::now();
    let swf_buf = swf::decompress_swf(reader).unwrap();
    let decompress_duration = decompress_start.elapsed();
    
    // 测量解析时间
    let parse_start = Instant::now();
    let swf = swf::parse_swf(&swf_buf).unwrap();
    let parse_duration = parse_start.elapsed();
    
    let total_duration = start.elapsed();
    
    // 输出结果
    println!("该 SWF 有 {} 帧。", swf.header.num_frames());
    println!("该 SWF 有 {} 个标签。", swf.tags.len());
    println!();
    println!("性能报告:");
    println!("文件打开时间: {:?}", file_duration);
    println!("解压时间: {:?}", decompress_duration);
    println!("解析时间: {:?}", parse_duration);
    println!("总耗时: {:?}", total_duration);
    println!();
    println!("各阶段耗时占比:");
    let total_micros = total_duration.as_micros() as f64;
    println!("文件打开: {:.1}%", file_duration.as_micros() as f64 / total_micros * 100.0);
    println!("解压缩: {:.1}%", decompress_duration.as_micros() as f64 / total_micros * 100.0);
    println!("解析: {:.1}%", parse_duration.as_micros() as f64 / total_micros * 100.0);
}