小编S. *_*ert的帖子

三星Galaxy S8上的RenderScript性能低下

语境

我有一个Android应用,需要一个图象,模糊的图像,去除模糊基于掩模和施加最终层(不相关)。最后两个步骤(基于蒙版消除模糊并应用最后一层)重复进行,每次使用一个新蒙版(150个蒙版)。

输出get绘制在画布(SurfaceView)上。这样,应用程序可以有效地创建具有动画模糊效果的图像视图。

技术细节和代码

所有这些图像处理步骤都是使用RenderScript实现的。

我将第1步的代码省略掉,使图片模糊,因为这与我要面对的问题无关。

步骤2:消除基于蒙版的模糊

我有一个自定义内核,该内核in Allocation作为参数并包含2个全局变量,这也是Allocations

这3个分配都使用Allocation.copyFrom(bitmap)从位图获取数据。

第三步:应用最后一层

在这里,我还有一个自定义内核,该内核in Allocation作为参数并包含3个全局变量,其中1是和Allocation,2是浮点数

这些内核的工作方式与这个问题无关,但是为了确保我在下面包括了一些简化的片段。

还要注意的另一件事是,我正在遵循所有最佳实践,以确保有关分配,RenderScript和我的SurfaceView的性能达到最佳状态。

因此,可以忽略常见的错误,例如每次创建一个新的RenderScript实例,不尽可能重用Allocations。

blurMask.rs

#pragma version(1)
#pragma rs java_package_name(com.example.rs)
#pragma rs_fp_relaxed

// Extra allocations
rs_allocation allocBlur;
rs_allocation allocBlurMask;

/*
 * RenderScript kernel that performs a masked blur manipulation.
 * Blur Pseudo: out = original * blurMask + …
Run Code Online (Sandbox Code Playgroud)

performance animation android renderscript samsung-s8

13
推荐指数
0
解决办法
148
查看次数

Selenium ChromeDriver - 在后台运行但不是无头

我正在寻找一种在后台使用 chrome 驱动程序运行 selenium 测试的方法。我的意思是背景,而不是前景聚焦窗口。我实际上可以做到这一点,但是一旦在 chrome 驱动程序中发生诸如打开新选项卡或在窗口之间切换(因此基本上是切换窗口句柄)之类的操作,浏览器窗口就会被推到前台。

所以我的问题是,如何在不无头运行测试的情况下防止这种情况发生?

任何建议表示赞赏,开放讨论。


编辑

作为一个有点临时的解决方案,我想出了以下内容。

使用 Windows 10 虚拟桌面功能,我在单独的虚拟桌面中运行测试,从而运行 chrome 浏览器窗口。然后我切换回我的主虚拟桌面以继续执行其他任务。这可以防止 chrome 浏览器窗口被强制置于前台。

请注意,当出现上述任何操作时,这仍然会使任务栏中出现闪烁的镀铬图标。

仍在寻找更可靠的解决方案,因此任何建议仍然得到认可。


为了希望打开新的观点和讨论点,并最终找到一个解决方案,我将提供一些关于我的代码正在做什么的更详细的信息。

我有 5 个 chrome webdrivers,每个 webdrivers 都包含 6 个选项卡(WindowHandles)。这个想法是必须在每个选项卡上连续重复某个过程。因此,我们循环遍历每个 webdriver,并在该 webdriver 中遍历每个选项卡,并将此选项卡设置为 webdrivers 当前的 WindowHandle。这使得 chrome 窗口明显地切换到指定的选项卡。

切换完成后,对选项卡的内容执行基本的 selenium 自动化,之后我们重复整个过程。

实际问题似乎发生在 chrome webdriver 切换到新选项卡(WindowHandle)时,此时包含该选项卡的 chrome 窗口被推到前台并窃取焦点。请注意,这并不总是发生,通常它可以毫无问题地切换选项卡。所以不清楚是否还有另一个因素会导致窗口窃取焦点。


编辑 2

执行以下操作后:

我重载了用于在选项卡(WindowHandles)之间切换的 selenium 方法,并且每次都调用 SetWindoPos。不幸的是,这也没有解决这个问题。我将尝试更深入地研究可能导致这种情况的原因,并将向您报告。– S. Van den Wyngaert

我在运行测试时出去了几个小时,然后回来发现令人惊讶的是我仍然在我的主要虚拟桌面(win10 功能)上。这意味着该问题在我离开期间并未发生。我再次开始工作,打开一个镀铬窗口,并注意到在我这样做后不久,焦点又被镀铬驱动程序的一个窗口偷走了。

我由此得出的结论是,只有在打开另一个 chrome 窗口(不是由代码中的 chrome 驱动程序打开)时才会出现问题。我会继续调查,并会报告更新。

在对这种行为进行了几个小时的调查后,我注意到当另一个 chrome 窗口打开时,只要它有焦点,问题就不会发生。所以快速总结一下:

在以下情况下不会发生此问题:

  • 没有打开或最小化其他镀铬窗口(非硒驱动)
  • 另一个镀铬窗口(非硒驱动)已打开并具有焦点
  • 另一个运行全屏模式的应用程序有焦点

在以下情况下确实会发生此问题:

  • 另一个镀铬窗口(非硒驱动)被打开并且没有焦点

请注意,当我谈论另一个 chrome 窗口时,我特指一个不是由 selenium 驱动的 …

c# selenium google-chrome webdriver selenium-chromedriver

11
推荐指数
1
解决办法
2595
查看次数

有没有办法从 4x4 矩阵计算 X 和 Y 轴上的 3D 旋转

首先,我根本不是数学专家。请容忍我的数学错误并在必要时纠正我,我很乐意学习。

我有一个立方体,它使用带有变换的 css 动画进行旋转:matrix3d(4x4)。我还可以手动旋转立方体,将用户操作转换为相同的矩阵3d 转换。

我想要的是当用户停止交互时带有 css 的旋转立方体,从用户离开的位置开始。这是我通过获取立方体的变换矩阵 3d 值并使用乘法动态设置 css 关键帧成功完成的事情。

然而,当用户开始与立方体交互时,立方体会跳转到其最后一个已知的手动旋转点并从那里继续,因为我无法弄清楚如何从 4x4 矩阵获取 X 和 Y 轴上的旋转。

我目前正在使用以下库Rematrix,它可以帮助我从手动旋转变为 css 旋转,如上所述。

我一直在研究有关欧拉的文章,以及如何从欧拉到矩阵,反之亦然,但正如我之前提到的,我认为这就是我缺乏数学知识阻碍我的地方。我似乎无法弄清楚。

作为参考,这里是我读过的一些文章,试图解决我的问题。

最后一个来源对我来说最有意义,但如果我是正确的,那么在这种情况下没有用,因为它是关于 2D 变换,而不是 3D。

我通过以下方式获取当前的matrix3d:

const style = getComputedStyle(this.element).transform
const matrix = Rematrix.parse(style)
Run Code Online (Sandbox Code Playgroud)

对于手动旋转,我使用基于用户鼠标位置(positionY、positionX)的矩阵乘法。

const r1 = Rematrix.rotateX(this.positionY)
const r2 = Rematrix.rotateY(this.positionX)

const transform = [r1, r2].reduce(Rematrix.multiply)

this.element.style[userPrefix.js + 'Transform'] = Rematrix.toString(transform)
Run Code Online (Sandbox Code Playgroud)

从手动旋转到 css 旋转,我使用以下函数:

const setCssAnimationKeyframes = (lastTransform, animationData) => {
  const rotationIncrement = 90

  let matrixes = [] …
Run Code Online (Sandbox Code Playgroud)

javascript math rotation matrix euler-angles

6
推荐指数
1
解决办法
5500
查看次数