V9.22β13No.11274
秀丸担当 さん 23/04/26 15:33
 
V9.22β13を公開しました。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm922b13_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm922b13_x64_signed.exe

[ ]
RE:11274 V9.22β13No.11279
western さん 23/04/27 17:33
 
v9.22β13 の公開お疲れ様です

> iskeydownの処理改善。

先日、計測に使ったヘルプにある iskeydown のキーコード調べる用サンプル
ですが、呼び出しのネイティブ対応の恩恵にびっくりです

.mac: 0.25ms (iskeydown 145回)
β12:600.00ms (jsmode から非ネイティブ呼び出し 1コール 4ms)
β13: 0.35ms (jsmode でも従来マクロからオーバーヘッド40%増し程度)


> renderpanecommandの幾つかの追加と変更。
> xpixel2,ypixel2追加。

こちらの機能追加ありがとうございます。
今回の新機能を使ってやりたいことを試したところ
座標由来のトラブルは解決して、
要望していた他の値も計算で求められるようになりました



あと、今回の新機能を使って1点だけ気になる点がありました。
レンダリング枠を最初に非表示の状態でインスタンス生成するために

{ "show": 1, "invisible": 1, }

を組み合わせて renderpanecommand したところ、
一瞬だけブラウザ枠が表示された後に消える という動作となりました。
(従来は "cy":"0px" を使って非表示を実現していたので、高さ指定で出てきた現象)

こちらは先に採用していた方式の枠の高さを"0px"としたり画面外に追い出せば
解決はしますが、改善して頂けると嬉しいです

[ ]
RE:11279 V9.22β13No.11280
こみやんま さん 23/04/27 18:10
 
>v9.22β13 の公開お疲れ様です
>
>> iskeydownの処理改善。
>
>先日、計測に使ったヘルプにある iskeydown のキーコード調べる用サンプル
>ですが、呼び出しのネイティブ対応の恩恵にびっくりです
>
>.mac: 0.25ms (iskeydown 145回)
>β12:600.00ms (jsmode から非ネイティブ呼び出し 1コール 4ms)
>β13: 0.35ms (jsmode でも従来マクロからオーバーヘッド40%増し程度)


それでもまだ、javascriptからnativeを呼び出すまでに「JS層でevalを2重ネストし
てやっとnativeを呼んでいる」という作りですからねぇ。

普通にeval排除してnativeへ引き渡し、ままリターンとかにするだけで、0.10ms切る
のでは、と思うのですが...

macroEval呼び出す際にexpression作るためにevalしてたのはわかりますが、
nativeに引き渡す際すら2重ものネストevalする理由がよくわからない...

[ ]
RE:11280 V9.22β13No.11281
こみやんま さん 23/04/27 18:56
 
中身みてると、もしかすると、秀丸担当さんが、他の hidemaruGlobal系関数と同じ
ように、
「public層では引数の数は明示しない」ようにしつつ、「nativeを呼び出す時には、
引数を個々に展開してnative関数に渡す」、ということをJScript/WebView共通にす
るために eval して 引数と展開しているのかな?? という気がしました。

とすると、普通に ****.apply(null, arguments)で渡していけばいいのではないでし
ょうか...

js{
  debuginfo(2)
  function iskeydown() { // hg.iskeydownの段階では引数を明示しない(他の関数
と同じポリシー)
      console.log(arguments);
   var r = _iskeydown.apply(null, arguments); // WebView2/V8では...arguments
 などと ... で展開出来るが、JScript側でできないので、applyに流すことで実現す
る。
      return r;
  }

  function _iskeydown(a, b, c) { // privateにして、ここでネイティブ用の加工する
     console.log(a + typeof(a));
     console.log(b + typeof(b));
     console.log(c + typeof(c));
     // ここで__native__を呼び出す形式にするとか
     var r = 10; // __hm__native._nf("iskeydown", a, b, c); ... でも ___hide
maruNative___._iskeydown(a,b,c)でも
     return r;
  }

  var ret = iskeydown(1,"2",3);
  console.log(ret);
}

1つ1つ用意するのではなく、1番目の引数に関数シンボル受け付ける形にして、na
tive内でシンボル見て振り分ける形にしても良いかもしれませんが
今は多くは 「関数番号」をeval経由でネイティブに渡して内部で振り分けているっ
ぽいなぁ、と思いましたが。

[ ]
RE:11281 V9.22β13No.11283
秀丸担当 さん 23/04/28 10:42
 
いろいろご確認ありがとうございます。

>レンダリング枠を最初に非表示の状態でインスタンス生成するために
>
>{ "show": 1, "invisible": 1, }

こういうケースで最初から見えないようにできたらいいです。
そういうこともできるように調整します。


>とすると、普通に ****.apply(null, arguments)で渡していけばいいのではないでし
>ょうか...

そういう指定方法もあるのですね。
JScriptとWebView2の両立やらいろいろあってややこしいです。
いずれは全部ネイティブになるのが理想ではあります。
menuやsprintfのようにパラメータ可変ではない普通のものであれば、function aaaG
lobal(a,b,c){return zzz.native(a,b,c);}みたいにそのまんまになるのが一番シン
プルかもしれないです。
というかそうできる部分はあるので、確立された部分は変えていこうかと思います。

[ ]