Skip to content

Commit

Permalink
Rename 'pose' to 'mojo_from_viewer' in mojo interfaces
Browse files Browse the repository at this point in the history
With the addition of the XRView array in XRFrameData and XRRenderInfo,
'pose' is ambiguous and doesn't describe what the transforms are.
'mojo_from_viewer' is consistent with the rest of the  convention.

Bug: 998146
Change-Id: I02aade55429814a00401a6985c9b49d4b2da9252
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3077503
Commit-Queue: Patrick To <patrto@microsoft.com>
Reviewed-by: Sam McNally <sammc@chromium.org>
Reviewed-by: Alexander Cooper <alcooper@chromium.org>
Cr-Commit-Position: refs/heads/main@{#914700}
  • Loading branch information
patrto authored and Chromium LUCI CQ committed Aug 24, 2021
1 parent b41937e commit 3c4f0de
Show file tree
Hide file tree
Showing 14 changed files with 55 additions and 51 deletions.
2 changes: 1 addition & 1 deletion chrome/browser/android/vr/gvr_scheduler_delegate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -991,7 +991,7 @@ void GvrSchedulerDelegate::SendVSync(device::mojom::VRPosePtr pose,
TRACE_EVENT0("gpu", "GvrSchedulerDelegate::XRInput");
frame_data->input_state = std::move(input_states_);

frame_data->pose = std::move(pose);
frame_data->mojo_from_viewer = std::move(pose);

device::WebXrFrame* frame = webxr_.GetAnimatingFrame();
frame->head_pose = head_mat;
Expand Down
44 changes: 23 additions & 21 deletions chrome/browser/vr/win/vr_browser_renderer_thread_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -359,37 +359,38 @@ void VRBrowserRendererThreadWin::OnWebXRSubmitted() {
device::mojom::XRRenderInfoPtr ValidateFrameData(
device::mojom::XRRenderInfoPtr data) {
device::mojom::XRRenderInfoPtr ret = device::mojom::XRRenderInfo::New();
ret->pose = device::mojom::VRPose::New();
ret->mojo_from_viewer = device::mojom::VRPose::New();

if (data->pose) {
if (data->pose->orientation) {
if (abs(data->pose->orientation->Length() - 1) < kEpsilon) {
ret->pose->orientation = data->pose->orientation->Normalized();
if (data->mojo_from_viewer) {
if (data->mojo_from_viewer->orientation) {
if (abs(data->mojo_from_viewer->orientation->Length() - 1) < kEpsilon) {
ret->mojo_from_viewer->orientation =
data->mojo_from_viewer->orientation->Normalized();
}
}

if (data->pose->position) {
ret->pose->position = data->pose->position;
if (data->mojo_from_viewer->position) {
ret->mojo_from_viewer->position = data->mojo_from_viewer->position;

bool any_out_of_range = !(InRange(ret->pose->position->x()) &&
InRange(ret->pose->position->y()) &&
InRange(ret->pose->position->z()));
bool any_out_of_range = !(InRange(ret->mojo_from_viewer->position->x()) &&
InRange(ret->mojo_from_viewer->position->y()) &&
InRange(ret->mojo_from_viewer->position->z()));
if (any_out_of_range) {
ret->pose->position = absl::nullopt;
ret->mojo_from_viewer->position = absl::nullopt;
// If testing with unexpectedly high values, catch on debug builds
// rather than silently change data. On release builds its better to
// be safe and validate.
DCHECK(false);
}
}
} // if (data->pose)
} // if (data->mojo_from_viewer)

if (!ret->pose->orientation) {
ret->pose->orientation = gfx::Quaternion();
if (!ret->mojo_from_viewer->orientation) {
ret->mojo_from_viewer->orientation = gfx::Quaternion();
}

if (!ret->pose->position) {
ret->pose->position = gfx::Point3F();
if (!ret->mojo_from_viewer->position) {
ret->mojo_from_viewer->position = gfx::Point3F();
}

ret->views.resize(data->views.size());
Expand Down Expand Up @@ -430,14 +431,15 @@ void VRBrowserRendererThreadWin::OnPose(int request_id,

// Deliver pose to input and scheduler.
DCHECK(data);
DCHECK(data->pose);
DCHECK(data->pose->orientation);
DCHECK(data->pose->position);
const gfx::Point3F& pos = *data->pose->position;
DCHECK(data->mojo_from_viewer);
DCHECK(data->mojo_from_viewer->orientation);
DCHECK(data->mojo_from_viewer->position);
const gfx::Point3F& pos = *data->mojo_from_viewer->position;

// The incoming pose represents where the headset is in "world space". So
// we'll need to invert to get the view transform.
gfx::Transform head_from_unoriented_head(data->pose->orientation->inverse());
gfx::Transform head_from_unoriented_head(
data->mojo_from_viewer->orientation->inverse());

// Negating all components will invert the translation.
gfx::Transform unoriented_head_from_world;
Expand Down
14 changes: 7 additions & 7 deletions device/vr/android/arcore/arcore_gl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -768,7 +768,7 @@ void ArCoreGl::GetFrameData(
frame_data->views.push_back(std::move(view));
}

frame_data->pose = std::move(pose);
frame_data->mojo_from_viewer = std::move(pose);
frame_data->time_delta = now - base::TimeTicks();
if (rendering_time_ratio_ > 0) {
frame_data->rendering_time_ratio = rendering_time_ratio_;
Expand Down Expand Up @@ -1545,19 +1545,19 @@ void ArCoreGl::ProcessFrame(
if (pending_shutdown_)
return;
DVLOG(3) << __func__ << " frame=" << frame_data->frame_id << ", pose valid? "
<< (frame_data->pose ? true : false);
<< (frame_data->mojo_from_viewer ? true : false);

DCHECK(IsOnGlThread());
DCHECK(is_initialized_);

if (frame_data->pose) {
DCHECK(frame_data->pose->position);
DCHECK(frame_data->pose->orientation);
if (frame_data->mojo_from_viewer) {
DCHECK(frame_data->mojo_from_viewer->position);
DCHECK(frame_data->mojo_from_viewer->orientation);

frame_data->input_state = GetInputSourceStates();

device::Pose mojo_from_viewer(*frame_data->pose->position,
*frame_data->pose->orientation);
device::Pose mojo_from_viewer(*frame_data->mojo_from_viewer->position,
*frame_data->mojo_from_viewer->orientation);

// Get results for hit test subscriptions.
frame_data->hit_test_subscription_results =
Expand Down
9 changes: 5 additions & 4 deletions device/vr/openxr/openxr_render_loop.cc
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ mojom::XRFrameDataPtr OpenXrRenderLoop::GetNextFrameData() {
frame_data->input_state = openxr_->GetInputState(
IsFeatureEnabled(device::mojom::XRSessionFeature::HAND_INPUT));

frame_data->pose = openxr_->GetViewerPose();
frame_data->mojo_from_viewer = openxr_->GetViewerPose();

UpdateStageParameters();

Expand All @@ -88,12 +88,13 @@ mojom::XRFrameDataPtr OpenXrRenderLoop::GetNextFrameData() {
}

if (IsFeatureEnabled(device::mojom::XRSessionFeature::HIT_TEST) &&
frame_data->pose->position && frame_data->pose->orientation) {
frame_data->mojo_from_viewer->position &&
frame_data->mojo_from_viewer->orientation) {
OpenXRSceneUnderstandingManager* scene_understanding_manager =
openxr_->GetOrCreateSceneUnderstandingManager(extension_helper_);
if (scene_understanding_manager) {
device::Pose mojo_from_viewer(*frame_data->pose->position,
*frame_data->pose->orientation);
device::Pose mojo_from_viewer(*frame_data->mojo_from_viewer->position,
*frame_data->mojo_from_viewer->orientation);
// Get results for hit test subscriptions.
frame_data->hit_test_subscription_results =
scene_understanding_manager->ProcessHitTestResultsForFrame(
Expand Down
2 changes: 1 addition & 1 deletion device/vr/orientation/orientation_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ void VROrientationDevice::GetInlineFrameData(
pose->orientation = latest_pose_;

mojom::XRFrameDataPtr frame_data = mojom::XRFrameData::New();
frame_data->pose = std::move(pose);
frame_data->mojo_from_viewer = std::move(pose);

std::move(callback).Run(std::move(frame_data));
}
Expand Down
2 changes: 1 addition & 1 deletion device/vr/orientation/orientation_device_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class VROrientationDeviceTest : public testing::Test {
[](base::OnceClosure quit_closure,
base::OnceCallback<void(mojom::VRPosePtr)> callback,
mojom::XRFrameDataPtr ptr) {
std::move(callback).Run(std::move(ptr->pose));
std::move(callback).Run(std::move(ptr->mojo_from_viewer));
std::move(quit_closure).Run();
},
loop.QuitClosure(), std::move(callback)));
Expand Down
2 changes: 1 addition & 1 deletion device/vr/public/mojom/isolated_xr_service.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ struct XRRenderInfo
int16 frame_id;

// The pose may be null if the device lost tracking.
VRPose? pose;
VRPose? mojo_from_viewer;

// Information about all the views in a frame. Views can appear in any order
// so it should not be assumed the left eye comes before the right eye. It is
Expand Down
2 changes: 1 addition & 1 deletion device/vr/public/mojom/vr_service.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -802,7 +802,7 @@ struct XRFrameData {
// The viewer pose of this frame. The pose may be null if the device lost
// tracking. The XRFrameData can still have other data, such as pass through
// camera image.
VRPose? pose;
VRPose? mojo_from_viewer;
// Time delta from an unspecified origin.
mojo_base.mojom.TimeDelta time_delta;
// The buffer_holder is used for sending imagery data back and forth across
Expand Down
2 changes: 1 addition & 1 deletion device/vr/windows/compositor_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ device::mojom::XRRenderInfoPtr GetRenderInfo(
device::mojom::XRRenderInfoPtr result = device::mojom::XRRenderInfo::New();

result->frame_id = frame_data.frame_id;
result->pose = frame_data.pose.Clone();
result->mojo_from_viewer = frame_data.mojo_from_viewer.Clone();

for (size_t i = 0; i < frame_data.views.size(); i++) {
result->views.push_back(frame_data.views[i]->Clone());
Expand Down
17 changes: 9 additions & 8 deletions third_party/blink/renderer/modules/xr/xr_frame_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ void XRFrameProvider::OnSessionEnded(XRSession* session) {
frame_id_ = -1;
immersive_presentation_provider_.reset();
immersive_data_provider_.reset();
immersive_frame_pose_ = nullptr;
immersive_frame_viewer_pose_ = nullptr;
is_immersive_frame_position_emulated_ = false;
first_immersive_frame_time_ = absl::nullopt;
first_immersive_frame_time_delta_ = absl::nullopt;
Expand Down Expand Up @@ -299,12 +299,12 @@ void XRFrameProvider::OnImmersiveFrameData(
// [1] https://immersive-web.github.io/webxr/#xr-animation-frame
double high_res_now_ms = UpdateImmersiveFrameTime(window, *data);

immersive_frame_pose_ = std::move(data->pose);
if (immersive_frame_pose_) {
immersive_frame_viewer_pose_ = std::move(data->mojo_from_viewer);
if (immersive_frame_viewer_pose_) {
DVLOG(3) << __func__ << ": pose available, emulated_position="
<< immersive_frame_pose_->emulated_position;
<< immersive_frame_viewer_pose_->emulated_position;
is_immersive_frame_position_emulated_ =
immersive_frame_pose_->emulated_position;
immersive_frame_viewer_pose_->emulated_position;
} else {
DVLOG(2) << __func__ << ": emulating immersive frame position";
is_immersive_frame_position_emulated_ = true;
Expand Down Expand Up @@ -450,13 +450,13 @@ void XRFrameProvider::ProcessScheduledFrame(
// because input events may call into |session.end()| which will destroy
// this data otherwise. Move the data into local scope here so that it can't
// be destroyed.
auto frame_pose = std::move(immersive_frame_pose_);
auto mojo_from_viewer_pose = std::move(immersive_frame_viewer_pose_);

// Prior to updating input source state, update the state needed to create
// presentation frame as newly created presentation frame will get passed to
// the input source select[/start/end] events.
immersive_session_->UpdatePresentationFrameState(
high_res_now_ms, frame_pose, frame_data, frame_id_,
high_res_now_ms, mojo_from_viewer_pose, frame_data, frame_id_,
is_immersive_frame_position_emulated_);

// Check if immersive session is still set as OnInputStateChange may have
Expand Down Expand Up @@ -522,7 +522,8 @@ void XRFrameProvider::ProcessScheduledFrame(

const auto& inline_frame_data = request.value;
device::mojom::blink::VRPosePtr inline_pose_data =
inline_frame_data ? std::move(inline_frame_data->pose) : nullptr;
inline_frame_data ? std::move(inline_frame_data->mojo_from_viewer)
: nullptr;

// Prior to updating input source state, update the state needed to create
// presentation frame as newly created presentation frame will get passed
Expand Down
2 changes: 1 addition & 1 deletion third_party/blink/renderer/modules/xr/xr_frame_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ class XRFrameProvider final : public GarbageCollected<XRFrameProvider> {
immersive_data_provider_;
HeapMojoRemote<device::mojom::blink::XRPresentationProvider>
immersive_presentation_provider_;
device::mojom::blink::VRPosePtr immersive_frame_pose_;
device::mojom::blink::VRPosePtr immersive_frame_viewer_pose_;
bool is_immersive_frame_position_emulated_ = false;

// Note: Oilpan automatically removes destroyed observers from
Expand Down
4 changes: 2 additions & 2 deletions third_party/blink/renderer/modules/xr/xr_session.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,7 @@ void XRSession::ApplyPendingRenderState() {

void XRSession::UpdatePresentationFrameState(
double timestamp,
const device::mojom::blink::VRPosePtr& frame_pose,
const device::mojom::blink::VRPosePtr& mojo_from_viewer_pose,
const device::mojom::blink::XRFrameDataPtr& frame_data,
int16_t frame_id,
bool emulated_position) {
Expand Down Expand Up @@ -1598,7 +1598,7 @@ void XRSession::UpdatePresentationFrameState(
}
}

mojo_from_viewer_ = getPoseMatrix(frame_pose);
mojo_from_viewer_ = getPoseMatrix(mojo_from_viewer_pose);
DVLOG(2) << __func__ << " : mojo_from_viewer_ valid? "
<< (mojo_from_viewer_ ? true : false);

Expand Down
2 changes: 1 addition & 1 deletion third_party/blink/renderer/modules/xr/xr_session.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ class XRSession final
// presentation frames.
void UpdatePresentationFrameState(
double timestamp,
const device::mojom::blink::VRPosePtr& frame_pose,
const device::mojom::blink::VRPosePtr& mojo_from_viewer_pose,
const device::mojom::blink::XRFrameDataPtr& frame_data,
int16_t frame_id,
bool emulated_position);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -889,7 +889,7 @@ class MockRuntime {
}

const frameData = {
pose: this.pose_,
mojoFromViewer: this.pose_,
views: views,
mojoSpaceReset: mojo_space_reset,
inputState: input_state,
Expand Down

0 comments on commit 3c4f0de

Please sign in to comment.