• Rocket


     
    介绍DefaultConfig类的组成。
     
     
    1. DefaultConfig
     
    DefaultConfig是Config的子类。其定义位于system/Config.scala:
     
    他直接使用Config的第一个(primary)构造方法。在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
     
    PS. 作为对比,找一个使用第二个(secondary)构造方法的子类:
     
    在Intellij IDEA中,按住CTRL点击extends后的Config,可以直接定位到使用的构造方法:
    注意光标位置的不同。
     
    DefaultConfig 由WithNBigCoresBaseConfig连接组成。++使用的是Parameters类中定义的方法,他把两个Parameters对象组合成为一个ChainParameters对象:
     
     
    2. WithNBigCores
     
    表示大核的个数及每个核的配置。
     
    1) 配置项存储在PartialParameters中,需要动态匹配才能获取到;
    2) 只包含一个配置项,其key为RocketTilesKey,继承在Field:
    3) 配置项的值是一个RocketTileParams链表。我们把最后一行稍微改一下:
    把光标定位到_ret上,使用Alt+Enter快捷键看Intellij IDEA有没有操作提示:
    Enter键选择“Add type annotation to value definition”:
    可以看到返回值类型为Seq[RocketTileParams]。这是一个小技巧。
     
    4) 其中使用site(SystemBusKey)获取系统总线的配置值。
     
     
    3. BaseConfig
     
    其定义形式与DefaultConfig一致,多个Config组合成为一个BaseConfig。
     
     
    4. 构造过程
     
    整理一下DefaultConfig实例化的过程。
     
    new DefaultConfig
    1) 首先会调用其父类的构造方法;若要调用其父类的构造方法,则需要为之准备参数:
    也就是创建Parameters p, p = new WithNBigCores(1) ++ new BaseConfig
     
    2) 分别实例化WithNBigCoresBaseConfig
     
    3) 把WithNBigCoresBaseConfig的实例使用方法++组合到一起;
     
    4) 调用Config的构造方法,产生DefaultConfig的实例;
     
    最终构造的结果如下图:
    其中,BaseConfig中只保留了最前面的两项配置。
     
     
    5. 查找过程
     
    假设有一个DefaultConfig的实例dftCfgInst,dftCfgInst(RocketTilesKey)的查找过程如下:
     
    1) dftCfgInst(RocketTilesKey)调用的是View中的方法:
     
    2) View.apply(pname)调用View.apply(pname, this);
     
    3) View.apply(pname, this)调用find(pname, site);注意这里的site为this,也就是dftCfgInst对象本身;
     
    4) find(pname, site)在Parameters中实现为:
    所以调用chain(site, new TerminalView, pname),其中site为dftCfgInst;
     
    5) chain(site, new TerminalView, pname)在Config中实现为:
    委托给p的chain方法。
     
    6) 这里dftCfgInst的p为ChainParameters,其chain方法定义为:
    委托给x的chain方法;
     
    7) 这里的x为WithNBigCores,是一个Config对象。如前所述,其chain委托给p.chain。这里的p为PartialParameters;
     
    8) PartialParameters的实现如下:
    在这里可以找到RocketTilesKey,也就是g.isDefaultAt(pname)返回真。
     
    整理成表格如下:
     
     
  • 相关阅读:
    Python: execute an external program (zz)
    Python notes
    Web Monitor/Dev/Test Tool Collection 网站/网页监控/开发/测试工具集合
    SilkTest 2006 sp2 Notes of GettingStartedTutorial (2008,07)
    Software Testing Essentials 软件测试精要
    Flex notes
    Review Java advanced features
    Fedora 11 Configuration and Management
    进制转换的方法原理
    win32 透明置顶
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10327359.html
Copyright © 2020-2023  润新知